用于将字节追加到.dat文件的java代码

时间:2013-07-11 21:29:19

标签: java

有没有办法将字节附加到文件? 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();
               }
            }
        }
    }


  }
}

3 个答案:

答案 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();
}