37

ファイルをバイト配列に変換し、バイト配列をストレージ上のファイルに書き込む多くの方法を見つけました。

私が望むのはjava.io.File、バイト配列に変換してから、バイト配列をjava.io.File.

次のようにストレージに書き出したくありません。

//convert array of bytes into file
FileOutputStream fileOuputStream = new FileOutputStream("C:\\testing2.txt"); 
fileOuputStream.write(bFile);
fileOuputStream.close();

私はどういうわけか次のことをしたい:

File myFile = ConvertfromByteArray(bytes);
4

9 に答える 9

56

それ以外の場合はこれを試してください:

ファイルをバイトに変換する

  import java.io.File;
  import java.io.FileInputStream;
  import java.io.FileNotFoundException;
  import java.io.IOException;


   public class Temp {

        public static void main(String[] args) {

         File file = new File("c:/EventItemBroker.java");

         byte[] b = new byte[(int) file.length()];
         try {
               FileInputStream fileInputStream = new FileInputStream(file);
               fileInputStream.read(b);
               for (int i = 0; i < b.length; i++) {
                           System.out.print((char)b[i]);
                }
          } catch (FileNotFoundException e) {
                      System.out.println("File Not Found.");
                      e.printStackTrace();
          }
          catch (IOException e1) {
                   System.out.println("Error Reading The File.");
                    e1.printStackTrace();
          }

       }
    }

バイトからファイルへの変換

      public class WriteByteArrayToFile {

         public static void main(String[] args) {

            String strFilePath = "Your path";
            try {
                 FileOutputStream fos = new FileOutputStream(strFilePath);
                 String strContent = "Write File using Java ";

                 fos.write(strContent.getBytes());
                 fos.close();
           }
          catch(FileNotFoundException ex)   {
                 System.out.println("FileNotFoundException : " + ex);
          }
         catch(IOException ioe)  {
                 System.out.println("IOException : " + ioe);
          }

       }
     }
于 2012-11-12T23:17:28.197 に答える
22

java.io.Fileクラスが実際に表すものを誤解していると思います。これは、システム上のファイルの単なる表現です。つまり、名前、パスなどです。

java.io.FileクラスのJavadocも見ましたか? ここを見 てください フィールドまたはメソッドまたはコンストラクターの引数を確認すると、すべてが URL/パスの表現であるというヒントがすぐに得られます。

Oracle は、最新の NIO.2 機能も備えたJava File I/O チュートリアルで非常に広範なチュートリアルを提供しています。

NIO.2 では、java.nio.file.Files.readAllBytes()を使用して 1 行で読み取ることができます。

同様に、java.nio.file.Files.write()を使用して、バイト配列にすべてのバイトを書き込むことができます。

アップデート

質問には Android のタグが付けられているため、より一般的な方法は、 を でラップしてからFileInputStreamBufferedInputStreamラップすることByteArrayInputStreamです。これにより、 の内容を読み取ることができますbyte[]。同様に、それらに相当するものはOutputStream.

于 2012-11-12T23:14:28.920 に答える
8

Apache FileUtil は、変換を行うための非常に便利なメソッドを提供します

try {
    File file = new File(imagefilePath);
    byte[] byteArray = new byte[file.length()]();
    byteArray = FileUtils.readFileToByteArray(file);  
 }catch(Exception e){
     e.printStackTrace();

 }
于 2014-12-10T21:05:33.640 に答える
8

これはできません。AFileは、ファイル システム内のファイルを参照する単なる抽象的な方法です。ファイルの内容自体は含まれていません。

オブジェクトを使用して参照できるメモリ内ファイルを作成しようとしている場合、このスレッドこのスレッドFile、および他の多くの場所で説明されているように、それを行うこともできません..

于 2012-11-12T23:00:56.127 に答える
3

主にインテリジェントなファイル パスであるファイルに対しては実行できません。FileOutputStream ではなく OutputStream 型を使用して、変数を宣言し、引数を渡すようにコードをリファクタリングできますか? その場合は、クラスjava.io.ByteArrayOutputStreamおよびjava.io.ByteArrayInputStreamを参照してください。

OutputStream outStream = new ByteArrayOutputStream();
outStream.write(whatever);
outStream.close();
byte[] data = outStream.toByteArray();
InputStream inStream = new ByteArrayInputStream(data);
...
于 2012-11-14T03:11:30.550 に答える
3

そのような機能はありませんが、File.createTempFile()によって一時ファイルを使用できます。

File temp = File.createTempFile(prefix, suffix);
// tell system to delete it when vm terminates.
temp.deleteOnExit();
于 2012-11-12T23:06:24.177 に答える
0

サーバ側

@RequestMapping("/download")
public byte[] download() throws Exception {
    File f = new File("C:\\WorkSpace\\Text\\myDoc.txt");
     byte[] byteArray = new byte[(int) f.length()];
        byteArray = FileUtils.readFileToByteArray(f);
        return byteArray;
}

クライアント側

private ResponseEntity<byte[]> getDownload(){
    URI end = URI.create(your url which server has exposed i.e. bla 
              bla/download);
    return rest.getForEntity(end,byte[].class);

}

public static void main(String[] args) throws Exception {


    byte[] byteArray = new TestClient().getDownload().getBody();
    FileOutputStream fos = new 
    FileOutputStream("C:\\WorkSpace\\testClient\\abc.txt");

     fos.write(byteArray);
     fos.close(); 
     System.out.println("file written successfully..");


}
于 2019-08-29T14:18:47.030 に答える