Java 使用BufferDoutpStream编写大量不同小文件的正确方法
我需要编写大量不同的小文件(每个文件大约30kb)。下面是我的java代码: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
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