我有一个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文件时仍然有效?
答案 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)