2017-01-22 2 views
0

Hallo Leute, ich versuche, eine PDF-Datei in Byte-Array zu konvertieren, aber es funktioniert nicht für mich, wenn ich versuche, die Datei von der ClassPath-Ressource mit dem ClassLoader und danach zu erhalten es zu Byte-Array funktioniert nicht Ich habe kein Null-Array, aber die Array-Länge ist es nicht in Ordnung, und wenn ich dieses Byte-Array als eine Datei schreibe ich habe eine beschädigte Datei und ich kann es nicht öffnen.ressource classPath-Datei in Byte-Array konvertieren funktioniert nicht

Eine letzte Sache, wenn ich versuche, die Datei mit dem Pfad wie (c: //java//files//test.pdf) zu bekommen es funktioniert und Byte-Array-Länge ist es in Ordnung und wenn ich das Array als eine Datei schreiben Ich habe genau die einige Datei in Eingabe. eine andere Sache, die immer Dateilänge und mit classloader Pfad ist genau das einige Mein Code ist:

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; 

    } 

Antwort

0

Eine letzte Sache, wenn ich versuche, die Datei mit dem Pfad wie (c zu erhalten: // java //files//test.pdf) es funktioniert und Byte-Array-Länge ist in Ordnung und wenn ich das Array als eine Datei schreibe ich habe genau die einige Datei in Eingabe.

c://java//files//test.pdf ist wahrscheinlich nicht im Klassenpfad.
Sie können also den Klassenlader nicht verwenden, um die Datei zu laden, da der Klassenlader sie nicht finden kann.

Entweder Sie bewegen Sie die Datei im Classpath (wenn es Sinn macht), entweder Sie die Datei mit dem abhängig Dateisystem geladen werden, wie Sie in Ihrer Frage schreiben:

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

davidxxx dachte, dass für Ihre Antwort, aber meine Es ist notwendig, den Dateiplatz im Ressourcenordner zu verwenden. Ich sollte keinen Pfad wie "c: //java//files//test.pdf" verwenden. Ich verwende es so, um die Ergebnisse zu vergleichen. –

+0

Ihr seid willkommen :) Meine Antwort sollte Beantworte die Frage: "Entweder du verschiebst die Datei im Klassenpfad (wenn es Sinn macht)," – davidxxx

Verwandte Themen