-1

有没有办法将字节附加到文件中?Java 代码从文件夹中的 PDF 文件中获取所有字节并附加到 .dat 文件中,但附加不起作用。如果我使用 write 它可以工作,但它只为第一个 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();
               }
            }
        }
    }


  }
}
4

3 回答 3

1

您正在循环中创建一个新FileOutputStream的,它会覆盖以前的文件。

于 2013-07-11T21:34:03.203 回答
1

您需要像这样在循环之外声明它,注意最后的布尔值用于附加数据。

FileOutputStream out = new FileOutputStream("07072013\\" + "jayraj" + ".dat", true);

然后使用

out.write(actualBytes)

快速查看FileOutputStream的文档显示了这一点

正如埃里克所提到的

移动finally块并关闭调用,直到 for 循环之后:

try {
   for ( all files ... ) {
       write ..
   }
} finally {
   out.close();
}
于 2013-07-11T21:40:42.280 回答
1

问题是finally块。这在第一次写入后立即执行,无论它是否失败。所以输出流总是在写入一个文件后关闭。

           try { 
            out.write(actualBytes);
           } finally {
               out.close();
           }

移动finally块并关闭调用,直到 for 循环之后:

try {
   for ( all files ... ) {
       write ..
   }
} finally {
   out.close();
}
于 2013-07-11T21:50:48.120 回答