有没有办法将字节附加到文件? Java代码从文件夹中获取PDF文件中的所有字节并附加到.dat文件中但附加不起作用。如果我使用写它的工作,但它只写第一个PDF文件。其他PDF文件怎么样?有没有办法将所有字节附加到.dat文件中?
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
public class newxmlnew {
public static void main(String[] args) throws IOException {
File folder = new File ("07072013");
File[] listOfFiles = folder.listFiles();
System.out.println("There are " + listOfFiles.length + " files");
String filesin;
int offset = 0;
int size = 0;
FileOutputStream out = new FileOutputStream("07072013\\" + "jayraj" + ".dat",true);
for (int i = 0; i < listOfFiles.length; i++) {
File f = listOfFiles[i];
System.out.println(i + " " + f.getAbsolutePath());
if (f.isFile()) {
filesin = listOfFiles[i].getName();
if (filesin.endsWith("pdf")) {
System.out.println(filesin);
Path aPath = Paths.get(f.getAbsolutePath());
System.out.println(filesin.toString());
byte[] actualBytes = Files.readAllBytes(aPath);
size = actualBytes.length;
try {
out.write(actualBytes);
} finally {
out.close();
}
}
}
}
}
}
答案 0 :(得分:1)
您正在循环中创建一个新的FileOutputStream
,它会覆盖以前的文件。
答案 1 :(得分:1)
你需要在循环之外声明它,注意boolean at end是附加数据。
FileOutputStream out = new FileOutputStream("07072013\\" + "jayraj" + ".dat", true);
然后使用
out.write(actualBytes)
快速查看FileOutputStream的文档会显示此
正如Erik所提到的那样
移动finally
块并关闭调用,直到for循环:
try {
for ( all files ... ) {
write ..
}
} finally {
out.close();
}
答案 2 :(得分:1)
问题是finally
阻止。这是在第一次写入后立即执行的,无论是否失败。因此,在写入一个文件后,输出流始终关闭。
try {
out.write(actualBytes);
} finally {
out.close();
}
移动finally
块并关闭调用,直到for循环:
try {
for ( all files ... ) {
write ..
}
} finally {
out.close();
}