现有文件减慢了java程序

时间:2014-10-29 03:31:13

标签: java io

我正在运行一些方法,这些方法接收许多文本文件,读取其内容,然后将有关其内容的内容写入新文件。我遇到的问题是,当文件存在时,程序非常慢。如果我删除该文件并运行该程序,那么它非常快。我正在为我的I / O使用BufferedReader和BufferedWriter。我觉得有一个简单的答案,我只是没有找到。提前致谢!如果可能,我宁愿不发布代码,抱歉!

编辑:

这里的内容非常普遍

File path= new File("some path");
        try {
            BufferedWriter writer = new BufferedWriter(new FileWriter(path, false));
            //do some string manipulation
            writer.append(string);
            writer.newLine();
                ...
            //once done
            writer.close();
        }catch(IOException e) {
            //... handle this ... 
        } 

问题是当这个文件存在时,一切都很慢。如果不是那么它很快。

1 个答案:

答案 0 :(得分:1)

当你说"时,我会重温你所做的一切。 //做一些字符串操作"。

以下是我注意到的> 1000次迭代:

  • 获取文件句柄和关闭编写器所需的时间通常保持不变
  • 内部循环操作,字符串" ABCDEFGHIJKLMNOPQRSTUVWXYZ"平均方差为98毫秒
  • 相同的内循环操作w /字符串四倍,字符串的大小在操作时间方面引起更大的变化。有时程序在2秒内完成,有时为20秒。

我还做了这个测试的版本,其中文件总是先被删除。它没有任何区别。这是我运行的代码:

public static void main(String[] args) {

    long s = System.currentTimeMillis();
    File path = new File("output.txt");

    long stop = System.currentTimeMillis();
    System.out.println("handle acquired " + (stop - s) );

    try {
        BufferedWriter writer = new BufferedWriter(new FileWriter(path, false));
        //do some string manipulation
        s = System.currentTimeMillis();
        for (int i =0; i < 10000000; i++) {
            String string = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ";
            writer.append(string);
            writer.newLine();
        }
        stop = System.currentTimeMillis();
        System.out.println("loop end " + (stop - s) );

        s = System.currentTimeMillis();
        writer.close();
        stop = System.currentTimeMillis();
        System.out.println("writer closed " + (stop - s) );
    }catch(IOException e) {
        //... handle this ...
    }
}