如何将Java Resource文件转换为byte []?

时间:2014-09-15 20:46:11

标签: java eclipse windows

我有一个Java程序需要从JAR中的资源读取文件,它只需要通过byte []。我的问题是将资源文件从项目中的文件夹(即tools / test.txt)转换为byte []。我尝试了以下内容(给#34;未定义类型"错误):

final byte[] temp = new File("tools/test.txt").getBytes();

我尝试的另一种方法导致无法找到该文件:

 FileOutputStream fos = new FileOutputStream("tools/test.txt");
 byte[] myByteArray = null;
 fos.write(myByteArray);
 fos.close();
 System.out.println("Results = " + myByteArray);

最后使用Inputstream和BufferedReader。这实际上是在从Eclipse运行程序时给出了文件的内容,但是当它作为jar运行时出现为null(我假设它也没有读取文件)。

        InputStream is = null;  
        BufferedReader br = null;  
        String line;  
        ArrayList list = new ArrayList();  
        try {   
              is = Main.class.getResourceAsStream("tools/test.txt");  
              br = new BufferedReader(new InputStreamReader(is));  
              while (null != (line = br.readLine())) {  
                 list.add(line);  
                 System.out.println("Output:" + line);
              }      

              while (null == (line = br.readLine())) {  
                     System.out.println("Error loading file:" + line);
                  }      

        }  
        catch (Exception ef) {  
          ef.printStackTrace();  
          System.out.println("Output:" + ef);
        }  

所以我的问题是,如果我有一个名为&#34的文件夹;工具"并且有一个名为" test.txt"的文件,我将使用什么代码将其转换为byte []并在编译成Jar文件时仍然有效?

2 个答案:

答案 0 :(得分:3)

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    InputStream in = Main.class.getResourceAsStream("/tools/test.txt");
    byte[] buffer = new byte[4096];
    for (;;) {
        int nread = in.read(buffer);
        if (nread <= 0) {
            break;
        }
        baos.write(buffer, 0, nread);
    }
    byte[] data = baos.toByteArray();
    String text = new String(data, "Windows-1252");
    Byte[] asByteObjects = new Byte[data.length];
    for (int i # 0; i < data.length: ++i) {
        asByteObjects[i] = data[i];
    }

如果没有标题斜杠,则路径将相对于类的包。 ByteArrayOutputStream用于收集byte []。

如果字节表示文本是某种编码,则可以将其转换为字符串。这里使用Windows Latin-1。

答案 1 :(得分:0)

你试过Scanner.nextByte()吗?使用要解析的文件作为输入创建一个新扫描程序,并使用for循环创建数组。