FileWriter 不写?
FileWriter not writing?
我有这段代码:
try {
f1 = new File("sink.txt");
f1.createNewFile();
fw = new FileWriter(f1);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
... code ...
System.out.println(sequence);
System.out.println(mySink.indexOf(sequence));
String result = "";
int firstIndex = mySink.indexOf(sequence);
if (firstIndex >= 0) {
System.out.println(true);
int secondIndex = mySink.indexOf(sequence, firstIndex + sequence.length());
if (secondIndex >= 0) {
System.out.println(true);
result = mySink.substring(firstIndex, secondIndex + sequence.length());
System.out.println(result);
}
}
try { // Write it to file
fw.write(result);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("done");
当我运行时,它打印了字符串 sequence
和它在 mySink
中的索引。然后它进入 if 语句并打印出两个 true
并打印出 result
所以我知道 result
已成功初始化。但是当我查看文件 sink.txt
时,我发现它是空白的。为什么会这样?我在我的代码中遗漏了什么吗?它之前工作正常,我添加了更多代码,它就这样做了。在程序执行期间,我从不触摸 FileWriter
或 File
。提前致谢!
如果你想看,这是我的输出:
[93, 73, 74, 81, 89, 70, 50, 80, 51, 83, 62, 13, 50, 0, 40, 98, 48, 43, 47, 89]
2000466
true
true
[93, 73, 74, 81, 89, 70, 50, 80, 51, 83, 62, 13, 50, 0, 40, 98, 48, 43, 47, 89]
[93, 73, 74, 81, 89, 70, 50, 80, 51, 83, 62, 13, 50, 0, 40, 59, 48, 43, 47, 89]
[93, 73, 74, 81, 89, 70, 50, 80, 51, 83, 62, 13, 50, 0, 81, 59, 48, 43, 47, 89]
[93, 73, 74, 81, 89, 70, 50, 80, 51, 83, 62, 13, 50, 0, 81, 98, 48, 43, 47, 89]
[93, 73, 74, 81, 89, 70, 50, 80, 51, 83, 62, 13, 50, 0, 40, 98, 48, 43, 47, 89]
done
简短的回答是您没有关闭(或冲洗)您的 FileWriter
。这意味着您的应用程序将退出,但未写入的数据仍位于文件缓冲区中。
您的代码中还有许多其他错误。从顶部开始:
try {
f1 = new File("sink.txt");
f1.createNewFile();
fw = new FileWriter(f1);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
createNewFile
调用是多余的。以下 new FileWriter
将创建文件。
您正在捕获异常并继续进行,就好像什么也没发生一样。您 >>cannot<< 从这些异常继续。只有成功打开文件,其余代码才能正常工作。
你不需要捕捉 FileNotFoundException
除非你打算以不同的方式处理它。抓取IOException
就够了,因为它是前者的超类
此时,您应该使用 try-with-resources:
f1 = new File("sink.txt");
try (FileWriter fw = new FileWriter(f1)) {
// compute stuff
// write stuff to file
} catch (FileNotFoundException ex) {
System.out.println(ex.getMessage());
} catch (IOException ex) {
// This is ugly for a real app. However, an IOException that
// is not a FileNotFoundException is "unexpected" at this point
// and providing a user-friendly explanation would be tricky.
ex.printStackTrace();
}
try-with-resources 将导致 fw
在块退出时自动关闭。关闭写入器将首先刷新它。
我有这段代码:
try {
f1 = new File("sink.txt");
f1.createNewFile();
fw = new FileWriter(f1);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
... code ...
System.out.println(sequence);
System.out.println(mySink.indexOf(sequence));
String result = "";
int firstIndex = mySink.indexOf(sequence);
if (firstIndex >= 0) {
System.out.println(true);
int secondIndex = mySink.indexOf(sequence, firstIndex + sequence.length());
if (secondIndex >= 0) {
System.out.println(true);
result = mySink.substring(firstIndex, secondIndex + sequence.length());
System.out.println(result);
}
}
try { // Write it to file
fw.write(result);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("done");
当我运行时,它打印了字符串 sequence
和它在 mySink
中的索引。然后它进入 if 语句并打印出两个 true
并打印出 result
所以我知道 result
已成功初始化。但是当我查看文件 sink.txt
时,我发现它是空白的。为什么会这样?我在我的代码中遗漏了什么吗?它之前工作正常,我添加了更多代码,它就这样做了。在程序执行期间,我从不触摸 FileWriter
或 File
。提前致谢!
如果你想看,这是我的输出:
[93, 73, 74, 81, 89, 70, 50, 80, 51, 83, 62, 13, 50, 0, 40, 98, 48, 43, 47, 89]
2000466
true
true
[93, 73, 74, 81, 89, 70, 50, 80, 51, 83, 62, 13, 50, 0, 40, 98, 48, 43, 47, 89]
[93, 73, 74, 81, 89, 70, 50, 80, 51, 83, 62, 13, 50, 0, 40, 59, 48, 43, 47, 89]
[93, 73, 74, 81, 89, 70, 50, 80, 51, 83, 62, 13, 50, 0, 81, 59, 48, 43, 47, 89]
[93, 73, 74, 81, 89, 70, 50, 80, 51, 83, 62, 13, 50, 0, 81, 98, 48, 43, 47, 89]
[93, 73, 74, 81, 89, 70, 50, 80, 51, 83, 62, 13, 50, 0, 40, 98, 48, 43, 47, 89]
done
简短的回答是您没有关闭(或冲洗)您的 FileWriter
。这意味着您的应用程序将退出,但未写入的数据仍位于文件缓冲区中。
您的代码中还有许多其他错误。从顶部开始:
try {
f1 = new File("sink.txt");
f1.createNewFile();
fw = new FileWriter(f1);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
createNewFile
调用是多余的。以下new FileWriter
将创建文件。您正在捕获异常并继续进行,就好像什么也没发生一样。您 >>cannot<< 从这些异常继续。只有成功打开文件,其余代码才能正常工作。
你不需要捕捉
FileNotFoundException
除非你打算以不同的方式处理它。抓取IOException
就够了,因为它是前者的超类此时,您应该使用 try-with-resources:
f1 = new File("sink.txt"); try (FileWriter fw = new FileWriter(f1)) { // compute stuff // write stuff to file } catch (FileNotFoundException ex) { System.out.println(ex.getMessage()); } catch (IOException ex) { // This is ugly for a real app. However, an IOException that // is not a FileNotFoundException is "unexpected" at this point // and providing a user-friendly explanation would be tricky. ex.printStackTrace(); }
try-with-resources 将导致
fw
在块退出时自动关闭。关闭写入器将首先刷新它。