2017-01-22 10 views
0

Привет, ребята, я пытаюсь преобразовать файл PDF в байтовый массив, но он не работает для меня, когда я пытаюсь получить файл из ресурса classPath с помощью classLoader и после этого преобразования он в байтовый массив, он не работает, у меня нет нулевого массива, но длина получаемого массива это не нормально, и когда я пишу этот массив байтов как файл, у меня есть поврежденный файл, и я не могу его открыть.ресурс classPath файл конвертировать в байтовый массив не работает

Последнее, что, когда я пытаюсь получить файл, используя путь, подобный (c: //java//files//test.pdf), это рабочая и байтовая длина массива, это нормально, и когда я пишу массив как файл У меня есть точно какой-то файл на входе. другая вещь становится длина файла, используя ClassLoader и используя путь в точности некоторых Мой код:

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

Последняя вещь, когда я пытаюсь получить файл, используя путь как (с: // Java //files//test.pdf), это рабочая и байтовая длина массива, это нормально , и когда я пишу массив как файл, у меня есть точно такой файл в файле .

c://java//files//test.pdf, вероятно, нет в пути к классам.
Итак, вы не можете использовать загрузчик классов для загрузки файла, поскольку загрузчик классов не сможет его найти.

Либо вы переместите файл в пути к классам (если это имеет смысл), либо вы загружаете файл с файловой системой зависимыми, как вы пишете в вашем вопросе:

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

davidxxx думать за ваш ответ, но мой нужно использовать место файла в папке с ресурсом i souldn't использовать путь, как «c: //java//files//test.pdf», я использую его так, чтобы сравнивать результаты –

+0

ваш приветствуется :) Мой ответ должен ответьте на вопрос: «Либо вы переместите файл в путь к классам (если это имеет смысл),« – davidxxx