用Java编写文件的替代方法

时间:2013-10-20 17:34:33

标签: 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
         out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

问题是我的程序没有在我的文件中写任何内容。

3 个答案:

答案 0 :(得分:1)

很难纠正的事情 -

为什么要创建两个不同的File对象实例

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 statement而不是尝试阻止。为什么?由于IOException发生资源将不会被关闭,如果资源没有关闭,您的更改可能不会反映在文件中。

接下来,抓住Runtime exceptions是一个很好的编程习惯。因此,不要使用Exception作为ploymorphic类型来捕获您的异常。在你的情况下使用像IOException这样抛出的任何东西。

现在可能有多种原因可以在文件中写入注释。因为你没有得到和Exception之所以可能发生这种情况的原因之一是因为你的静态函数没有被调用,或者字符串/对象sMax(无论是什么)是空的。

此外,将在当前目录中创建文件(如果尚未存在)。因此,如果您的代码中有多个实例正在创建具有相同名称的文件,那么请确保选择正确的实例。

答案 1 :(得分:0)

你可以在结束前致电out.flush()吗? 这将确保缓冲区中的任何内容立即写入文件。

答案 2 :(得分:0)

您必须刷新流,以便将内存中的内容写入驱动器。你写给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语句之外,因为Writers / OutputStreams在构造期间抛出的唯一例外是FileNotFoundException,这意味着文件从未在第一时间打开,所以我们不必关闭它。