[英]Get byte [] from file in ZIP
我需要從 *.zip 獲取一個文件作為字節數組。 我這樣做
String zipFileLocation = pathToFile;
File file = new File(zipFileLocation);
ZipFile zipfile = new ZipFile(file);
ZipEntry zipentry;
System.out.println("nList of files in zip archive");
int fileNumber = 0;
for (Enumeration<? extends ZipEntry> e = zipfile.entries();
e.hasMoreElements(); fileNumber++) {
zipentry = e.nextElement();
if (!zipentry.isDirectory()) {
System.out.println(fileNumber + "-" + zipentry.getName());
}
}
for (Enumeration<? extends ZipEntry> e = zipfile.entries(); e.hasMoreElements(); ) {
zipentry = e.nextElement();
if (!zipentry.isDirectory()) {
fileName = zipentry.getName();
InputStream input = zipfile.getInputStream(zipentry);
BufferedReader br = new BufferedReader(new InputStreamReader(input, "UTF-8"));
(hash map) nameANDbytes.put(fileName, br.toString().getBytes());
}
可以說,我得到
[B@8f2ef19
但是當我解壓縮文件並執行以下操作時:
String pathToCheckingFile = "path_to_file";
byte[] b = {};
try {
RandomAccessFile f = new RandomAccessFile(pathToCheckingFile, "r");
b = new byte[(int) f.length()];
f.read(b);
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
System.out.println(b);
我得到:
[B@2cf3d63b
怎么了?
此外,如果我多次執行最后一段代碼 - 我總是得到不同的結果。
您可以使用以下代碼來獲取 Bytes 或 String :
public static void main(String[] args) throws IOException {
ZipFile zipFile = new ZipFile("C:/Test/Test.zip");
Enumeration<? extends ZipEntry> entries = zipFile.entries();
while(entries.hasMoreElements()){
ZipEntry entry = entries.nextElement();
System.out.println(entry.getName());
InputStream stream = zipFile.getInputStream(entry);
//For characters
//BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
BufferedInputStream reader = new BufferedInputStream(stream);
//For line reading
//System.out.println(reader.readLine());
int byteRead = reader.read();
while(byteRead != -1) {
System.out.println(byteRead);
byteRead = reader.read();
}
}
}
您看到的只是每次運行時實例化的對象,toString 表示對象哈希碼的無符號十六進制表示
BufferedReader.toString()
不執行任何 I/O。 如果您想要流的內容,則必須閱讀它們。 BufferedReader
無論如何都不合適,除非您知道文件是文本。
首先,我們可以將 zip 文件轉換為簡單的文件對象。 Apache 公共庫 IOUtils 具有用於執行相同操作的內置功能。
ZipFile zipFile = new ZipFile(convertMultiPartToFile(file)
byte[] bytes = IOUtils.readAllBytes(zipFile.getInputStream(entry));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.