我需要编写大量不同的小文件(每个文件大约30kb).Below是我的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对象?是否有更有效的方法来编写大量的小文件?
答案 0 :(得分:1)
您无法共享FileOutputStream,正如Sotirios所说。您的方法的问题是您每次迭代都创建一个新文件,而不关闭它们。这可能会导致您的程序克服允许打开文件的限制。
在linux上使用:
cat /proc/sys/fs/file-max
读取您可以打开的最大文件数。
和
ulimit -n unlimited
删除该限制(小心并调查其他ulimit选项)。
答案 1 :(得分:1)
没有。如果您使用FileOutputStream
封装到BufferedOutputStream
,则必须为每个文件创建两个实例。
但是如果使用java 7,则可以使用Files#write(Path path, byte\[\] bytes, OpenOption... options)
而不创建两个实例。这个类是从java 7中引入的。