将字节附加到.dat文件的java代码

将字节附加到.dat文件的java代码,java,Java,有没有办法将字节附加到文件中?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代码,用于从文件夹中的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();
               }
            }
        }
    }


  }
}

您正在循环内创建一个新的FileOutputStream,该文件将覆盖上一个文件。

您需要在循环外声明它,请注意,末尾的布尔值用于追加数据

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

out.write(actualBytes)
快速查看文档可以看出这一点

正如埃里克也提到的

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

try {
   for ( all files ... ) {
       write ..
   }
} finally {
   out.close();
}
try {
   for ( all files ... ) {
       write ..
   }
} finally {
   out.close();
}
问题是最后一块。无论是否失败,这都会在第一次写入后立即执行。所以outputstream总是在写入一个文件后关闭

           try { 
            out.write(actualBytes);
           } finally {
               out.close();
           }
移动finally块并关闭调用,直到for循环之后:

try {
   for ( all files ... ) {
       write ..
   }
} finally {
   out.close();
}
try {
   for ( all files ... ) {
       write ..
   }
} finally {
   out.close();
}

快速谷歌帮助这一个。我在谷歌搜索,附加字节,但。。它没有给我任何解决办法。。请帮帮我。。谢谢所以,我需要把箱子放在外面,以便循环。。实际上我试过了,但是。。它给我的错误,它也没有附加。。。。。请帮帮我。。谢谢你还需要把你的手移到外面;在循环外部,否则流在第一个循环之后关闭。因此我需要在for循环外部创建文件。。我试过了,但它给我的错误流关闭!!我在我的帖子中编辑了那个代码,请帮助我。。谢谢谢谢大家!!现在可以工作了。。非常感谢你!!