2017-01-22 8 views
0

私はバイト配列にpdfファイルを変換しようとしていますが、classLoaderを使用して、その変換後にclassPathリソースからファイルを取得しようとするとdosn'tは私のために働いていますそれは動作しませんバイト配列には、私はnull配列を持っていないが、配列の長さを取得することはOKではないと私はファイルとしてこのバイト配列を書くと、私は破損したファイルがあり、リソースクラスパスファイルはバイト配列に変換されません

最後のことは、(c://java//files//test.pdf)のようなパスを使用してファイルを取得しようとしているときに動作し、バイト配列の長さです。これは大丈夫です。私はちょうど入力のいくつかのファイルを持っています。取得ファイルの長さは、クラスローダを使用して、パスを使用して別のものは、まさに私のコードは、いくつかの です:

public static void main(String[] args) { 

     try { 

      // convert file to byte[] 
      byte[] bFile = readBytesFromFile("C:\\TEMP\\test.pdf"); 
      byte[] bytes = readBytesFromFileResources(); 

      System.out.println(bFile.length);//60255 
      System.out.println(bytes.length);//14463 
} 
private static byte[] readBytesFromFile(String filePath) { 

     FileInputStream fileInputStream = null; 
     byte[] bytesArray = null; 

     try { 

      File file = new File(filePath); 
      bytesArray = new byte[(int) file.length()]; 

      //read file into bytes[] 
      fileInputStream = new FileInputStream(file); 
      fileInputStream.read(bytesArray); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      if (fileInputStream != null) { 
       try { 
        fileInputStream.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 

     } 

     return bytesArray; 

    } 

    private static byte[] readBytesFromFileResources() { 


     ClassLoader classLoader = ReadFile.class.getClassLoader(); 
     File file = new File(classLoader.getResource("test.pdf").getFile()); 
     FileInputStream fileInputStream = null; 
     byte[] bytesArray = null; 

     try { 
      bytesArray = new byte[(int) file.length()]; 

      //read file into bytes[] 
      fileInputStream = new FileInputStream(file); 
      fileInputStream.read(bytesArray); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      if (fileInputStream != null) { 
       try { 
        fileInputStream.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 

     } 

     return bytesArray; 

    } 

答えて

0

私は のようなパスを使用してファイルを取得しようとしている最後のもの(C:// javaの//files//test.pdf)それは動作しており、バイト配列の長さはOKです と私はファイルとして配列を書くときに私はちょうど 入力のいくつかのファイルを持っています。

c://java//files//test.pdfはおそらくクラスパスにありません。
クラスローダーがファイルを見つけることができないので、クラスローダーを使用してファイルをロードすることはできません。

(それは理にかなっている場合)、あなたはどちらか、クラスパスにファイルを移動し、あなたの質問に書いているあなたは、ファイルシステムに依存する方法でファイルをロードする次のいずれか

File file = new file("c://java//files//test.pdf)"; 
+0

davidxxxは、あなたの答えのためのだと思いますが、私の必要があります私はちょうど結果を比較するためにこれを使用して –

+0

あなたの歓迎:)私の答えは "c://java//files//test.pdf"のようなパスを使用する必要はありませんリソースフォルダ内のファイルの場所を使用する質問に答えます: "クラスパスでファイルを移動するか(意味があれば)、" – davidxxx

関連する問題