簡體   English   中英

從 ZIP 文件中獲取字節 []

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM