用Java编写文件的替代方法
我有下一个函数:用Java编写文件的替代方法,java,file-io,Java,File Io,我有下一个函数: static void write() { try { File file = new File ("flip.out"); BufferedWriter out = new BufferedWriter(new FileWriter(file)); out.write(sMax); System.out.println(sMax);//This command it works
static void write()
{
try {
File file = new File ("flip.out");
BufferedWriter out = new BufferedWriter(new FileWriter(file));
out.write(sMax);
System.out.println(sMax);//This command it works
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
问题是我的程序没有在我的文件中写入任何内容。在关闭之前,你能调用
out.flush()
。
这将确保缓冲区中的任何内容都会立即写入文件。需要纠正的事情很少- 为什么要创建文件对象的两个不同实例
File file = new File ("flip.out");
BufferedWriter out = new BufferedWriter(new FileWriter("flip.out"));
你需要做的就是
File file = new File ("flip.out");
BufferedWriter out = new BufferedWriter(new FileWriterfile(file ) ));
下一步,在finally语句中输入结束调用,而不是try block。为什么?由于IOException发生,资源将不会关闭,如果资源未关闭,您的更改可能不会反映在文件中
其次,不捕获运行时异常是一种很好的编程实践。因此,不要将Exception
用作捕捉异常的多边形类型。在您的案例中使用像IOException一样抛出的任何内容
现在可能有各种各样的原因来解释为什么在文件中写入noting。由于没有得到异常,这可能是因为没有调用静态函数,或者字符串/objectsMax
(无论是什么)为空
此外,文件(如果尚未存在)将在当前目录中创建。因此,如果您的代码中有多个实例正在创建同名文件,那么请确保选中了正确的实例。您必须刷新流,以便将内存中的内容写入驱动器。您写入BufferedWriter的内容位于一个字节数组中,等待它的其余部分被填满,然后再实际写入磁盘。这有助于提高性能,但意味着您必须刷新流,以防没有填满缓冲区。以下是如何做到这一点:
static void write() throws IOException {
BufferedWriter out = new BufferedWriter(new FileWriter("flip.out"));
try {
out.write(sMax);
out.flush();
} catch (Exception e) {
// probably could ditch this and
// just the exception bubble up and
// handle it higher up.
e.printStackTrace();
} finally {
out.close();
}
}
因此,如果它到达flush(),我们就知道我们已经将所有内容写入了我们想要的流。然而,如果我们遇到异常,我们会确保关闭流,不管成功与否。最后,我们的流在try语句之外,因为writer/OutputStreams在构造期间引发的唯一异常是FileNotFoundException,这意味着文件从未打开过,因此我们不必关闭它。sMax来自何处?sMax是该类的成员。当我调用System.out.println(sMax)时,它显示在console@Kugathasan阿比马兰也不例外!