Java 使用BufferDoutpStream编写大量不同小文件的正确方法

Java 使用BufferDoutpStream编写大量不同小文件的正确方法,java,file,fileoutputstream,bufferedoutputstream,Java,File,Fileoutputstream,Bufferedoutputstream,我需要编写大量不同的小文件(每个文件大约30kb)。下面是我的java代码: for(every file){ File destFile = new File(fileName); try { FileOutputStream fos = new FileOutputStream(destFile); BufferedOutputStream bos = new BufferedOutputStream(fos); // Sys

我需要编写大量不同的小文件(每个文件大约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();
    }
}

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

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

在linux上使用:

cat /proc/sys/fs/file-max
读取可以打开的最大文件数

以及:


若要删除该限制(请小心并研究其他ulimit选项)。

否。如果使用包装到
BufferedOutputStream
中的
FileOutputStream
,则必须为每个文件创建这两个实例


但是,如果您使用Java7,则可以在不创建两个实例的情况下使用。这个类是从java 7引入的。

不,您不能在files.thx@Martin之间共享
FileOutputStream
,以进行编辑。该在意大利睡觉了。。。上午3时30分:)
ulimit -n unlimited