-1

ファイルにバイトを追加する方法はありますか? フォルダー内の PDF ファイルからすべてのバイトを取得し、.dat ファイルに追加する Java コードですが、追加が機能しません。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

問題はfinallyブロックです。これは、失敗するかどうかにかかわらず、最初の書き込みの直後に実行されます。そのため、1 つのファイルを書き込んだ後、outputstream は常に閉じられます。

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

ブロックを移動しfinally、for ループの後まで呼び出しを閉じます。

try {
   for ( all files ... ) {
       write ..
   }
} finally {
   out.close();
}
于 2013-07-11T21:50:48.120 に答える
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 に答える