0

我需要编写大量不同的小文件(每个文件大约 30kb)。下面是我的 java 代码:

 for(every file){
    File destFile = new File(fileName);
    try {
        FileOutputStream fos = new FileOutputStream(destFile);
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        // System.out.println(dr.readLine());
        bos.write(result.getBytes(
                "UTF-8"));

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

当然,对于每个文件,我都必须新建一个 File 对象。但是是否有必要为每个不同的文件新建 fileOutputStream 和 BufferdOutputStream 对象?有没有更有效的方法来编写大量小文件?

4

2 回答 2

1

正如 Sotirios 所说,您不能共享 FileOutputStream。您的方法的问题是您每次迭代都创建一个新文件,而没有关闭它们。这可能会导致您的程序克服允许打开文件的限制。

在linux上使用:

cat /proc/sys/fs/file-max

读取您可以打开的最大文件数。

和:

ulimit -n unlimited

删除该限制(小心并调查其他 ulimit 选项)。

于 2013-12-28T02:22:33.613 回答
1

不可以。如果您使用FileOutputStreamWrapped into BufferedOutputStream,则必须为每个文件创建两个实例。

但是如果你使用 java 7,你可以Files#write(Path path, byte\[\] bytes, OpenOption... options)在不创建两个实例的情况下使用。这个类是从java 7引入的。

于 2013-12-28T02:25:21.083 回答