[英]InputStreams and OutputStreams
我寫了這個簡短的程序,它有一個很小的GUI。 它應該允許您鍵入文本,然后您可以將其保存為txt文件或從以前保存的文件中讀取或刪除現有文件。 它有效,但有一些奇怪的錯誤。 有時在創建文件后,如果我嘗試刪除它,它將不會刪除該文件。
另外,我完全不確定我是否以良好的方式編寫代碼。 我想知道你是否可以看看我寫的東西,發現我應該寫不同的弱點或區域。 也許你可以看到為什么在創建文件后刪除文件有問題。 我真的很茫然,我不知道該問誰。 這是我的代碼:
public class InputOutout extends JFrame{
private static final long serialVersionUID = -7073762217756427192L;
JLabel label;
JTextField tf;
JButton buttonAdd;
JButton buttonDisplay;
JButton buttonErase;
public InputOutout() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
setLayout(new FlowLayout());
label = new JLabel("Enter text");
add(label);
tf = new JTextField(10);
add(tf);
buttonAdd = new JButton("Press to save to file");
add(buttonAdd);
buttonDisplay = new JButton("Press to display file content");
add(buttonDisplay);
buttonErase = new JButton("Press to erase file");
add(buttonErase);
eventAdd add = new eventAdd();
eventDisplay remove = new eventDisplay();
eventErase erase = new eventErase();
buttonAdd.addActionListener(add);
buttonDisplay.addActionListener(remove);
buttonErase.addActionListener(erase);
}
private class eventAdd implements ActionListener {
public void actionPerformed(ActionEvent e) {
try {
String word = tf.getText()+ " ";
FileWriter stream = new FileWriter("text.txt",true);
BufferedWriter out = new BufferedWriter(stream);
out.append(word);
out.close();
tf.setText("");
} catch (Exception ex){
JOptionPane.showMessageDialog(null,ex.getMessage());
}
}
}
private class eventDisplay implements ActionListener {
public void actionPerformed(ActionEvent e) {
try {
FileReader stream = new FileReader("text.txt");
BufferedReader in = new BufferedReader(stream);
String text = in.readLine();
JOptionPane.showMessageDialog(null, text);
stream.close();
} catch (Exception ex){
JOptionPane.showMessageDialog(null,ex.getMessage());
}
}
}
private class eventErase implements ActionListener {
public void actionPerformed(ActionEvent e) {
try {
File file = new File("text.txt");
boolean success = file.delete();
if (!success) {
JOptionPane.showMessageDialog(null, "File was not deleted");
} else {
JOptionPane.showMessageDialog(null, "File was deleted");
}
} catch (Exception ex) {
JOptionPane.showMessageDialog(null,ex.getMessage());
}
}
}
public static void main(String[] args) {
InputOutout gui = new InputOutout();
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui.setSize(350,100);
gui.setTitle("SuperWORD 2013");
gui.setVisible(true);
}
}
file.delete()
周圍的邏輯不太正確,因為只有刪除它才會返回true
。 這意味着如果file.delete()
不存在,它將返回false
。 在嘗試刪除文件之前檢查文件是否存在:
File file = new File("text.txt");
if (file.exists())
{
if (!file.delete())
{
JOptionPane.showMessageDialog(null, "File was not deleted");
}
else
{
JOptionPane.showMessageDialog(null, "File was deleted");
}
}
else
{
JOptionPane.showMessageDialog(null, "File does not exist");
}
建議使用try {} catch() finally {}
構造來確保調用BufferedReader.close()
或BufferedWriter.close()
:
try
{
BufferedWriter out = new BufferedWriter(new FileWriter("text.txt",true));
try
{
String word = tf.getText()+ " ";
out.append(word);
tf.setText("");
}
finally
{
try
{
out.close();
}
catch (IOException ex)
{
// Report close failure.
JOptionPane.showMessageDialog(null, ex.getMessage());
}
}
}
catch (Exception ex)
{
// Report open or write failure.
JOptionPane.showMessageDialog(null,ex.getMessage());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.