1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > java 内存中创建文件_java - 如何在Java中创建一个zip文件 - 堆栈内存溢出

java 内存中创建文件_java - 如何在Java中创建一个zip文件 - 堆栈内存溢出

时间:2021-04-21 16:47:46

相关推荐

java 内存中创建文件_java - 如何在Java中创建一个zip文件 - 堆栈内存溢出

===============>>#1 票数:208 已采纳

看这个例子:

StringBuilder sb = new StringBuilder();

sb.append("Test String");

File f = new File("d:\\test.zip");

ZipOutputStream out = new ZipOutputStream(new FileOutputStream(f));

ZipEntry e = new ZipEntry("mytext.txt");

out.putNextEntry(e);

byte[] data = sb.toString().getBytes();

out.write(data, 0, data.length);

out.closeEntry();

out.close();

这将在D:的根目录中创建一个名为test.zip的zip文件,其中将包含一个名为mytext.txt文件。 当然,您可以添加更多的zip条目,还可以指定一个子目录,如下所示:

ZipEntry e = new ZipEntry("folderName/mytext.txt");

您可以在此处找到有关Java压缩的更多信息。

===============>>#2 票数:132

Java 7内置了ZipFileSystem,可用于从zip文件创建,写入和读取文件。

Map env = new HashMap<>();

// Create the zip file if it doesn't exist

env.put("create", "true");

URI uri = URI.create("jar:file:/codeSamples/zipfs/zipfstest.zip");

try (FileSystem zipfs = FileSystems.newFileSystem(uri, env)) {

Path externalTxtFile = Paths.get("/codeSamples/zipfs/SomeTextFile.txt");

Path pathInZipfile = zipfs.getPath("/SomeTextFile.txt");

// Copy a file into the zip file

Files.copy(externalTxtFile, pathInZipfile, StandardCopyOption.REPLACE_EXISTING);

}

===============>>#3 票数:33

要编写ZIP文件,请使用ZipOutputStream。 对于要放入ZIP文件中的每个条目,创建一个ZipEntry对象。 您将文件名传递给ZipEntry构造函数; 它设置其他参数,例如文件日期和解压缩方法。 您可以根据需要覆盖这些设置。 然后,您调用ZipOutputStream的putNextEntry方法以开始编写新文件。 将文件数据发送到ZIP流。 完成后,调用closeEntry。 对要存储的所有文件重复此操作。 这是一个代码框架:

FileOutputStream fout = new FileOutputStream("test.zip");

ZipOutputStream zout = new ZipOutputStream(fout);

for all files

{

ZipEntry ze = new ZipEntry(filename);

zout.putNextEntry(ze);

send data to zout;

zout.closeEntry();

}

zout.close();

===============>>#4 票数:17

这是一个压缩整个目录 (包括子文件和子目录)的示例代码,它使用Java NIO的walk文件树功能。

import java.io.FileOutputStream;

import java.io.IOException;

import java.nio.file.*;

import java.nio.file.attribute.BasicFileAttributes;

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

public class ZipCompress {

public static void compress(String dirPath) {

final Path sourceDir = Paths.get(dirPath);

String zipFileName = dirPath.concat(".zip");

try {

final ZipOutputStream outputStream = new ZipOutputStream(new FileOutputStream(zipFileName));

Files.walkFileTree(sourceDir, new SimpleFileVisitor() {

@Override

public FileVisitResult visitFile(Path file, BasicFileAttributes attributes) {

try {

Path targetFile = sourceDir.relativize(file);

outputStream.putNextEntry(new ZipEntry(targetFile.toString()));

byte[] bytes = Files.readAllBytes(file);

outputStream.write(bytes, 0, bytes.length);

outputStream.closeEntry();

} catch (IOException e) {

e.printStackTrace();

}

return FileVisitResult.CONTINUE;

}

});

outputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

要使用此功能,只需致电

press("target/directoryToCompress");

然后您将获得一个zip文件目录ToCompress.zip

===============>>#5 票数:3

public static void main(String args[])

{

omtZip("res/", "omt.zip");

}

public static void omtZip(String path,String outputFile)

{

final int BUFFER = 2048;

boolean isEntry = false;

ArrayList directoryList = new ArrayList();

File f = new File(path);

if(f.exists())

{

try {

FileOutputStream fos = new FileOutputStream(outputFile);

ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(fos));

byte data[] = new byte[BUFFER];

if(f.isDirectory())

{

//This is Directory

do{

String directoryName = "";

if(directoryList.size() > 0)

{

directoryName = directoryList.get(0);

System.out.println("Directory Name At 0 :"+directoryName);

}

String fullPath = path+directoryName;

File fileList = null;

if(directoryList.size() == 0)

{

//Main path (Root Directory)

fileList = f;

}else

{

//Child Directory

fileList = new File(fullPath);

}

String[] filesName = fileList.list();

int totalFiles = filesName.length;

for(int i = 0 ; i < totalFiles ; i++)

{

String name = filesName[i];

File filesOrDir = new File(fullPath+name);

if(filesOrDir.isDirectory())

{

System.out.println("New Directory Entry :"+directoryName+name+"/");

ZipEntry entry = new ZipEntry(directoryName+name+"/");

zos.putNextEntry(entry);

isEntry = true;

directoryList.add(directoryName+name+"/");

}else

{

System.out.println("New File Entry :"+directoryName+name);

ZipEntry entry = new ZipEntry(directoryName+name);

zos.putNextEntry(entry);

isEntry = true;

FileInputStream fileInputStream = new FileInputStream(filesOrDir);

BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream, BUFFER);

int size = -1;

while( (size = bufferedInputStream.read(data, 0, BUFFER)) != -1 )

{

zos.write(data, 0, size);

}

bufferedInputStream.close();

}

}

if(directoryList.size() > 0 && directoryName.trim().length() > 0)

{

System.out.println("Directory removed :"+directoryName);

directoryList.remove(0);

}

}while(directoryList.size() > 0);

}else

{

//This is File

//Zip this file

System.out.println("Zip this file :"+f.getPath());

FileInputStream fis = new FileInputStream(f);

BufferedInputStream bis = new BufferedInputStream(fis,BUFFER);

ZipEntry entry = new ZipEntry(f.getName());

zos.putNextEntry(entry);

isEntry = true;

int size = -1 ;

while(( size = bis.read(data,0,BUFFER)) != -1)

{

zos.write(data, 0, size);

}

}

//CHECK IS THERE ANY ENTRY IN ZIP ? ----START

if(isEntry)

{

zos.close();

}else

{

zos = null;

System.out.println("No Entry Found in Zip");

}

//CHECK IS THERE ANY ENTRY IN ZIP ? ----START

}catch(Exception e)

{

e.printStackTrace();

}

}else

{

System.out.println("File or Directory not found");

}

}

}

===============>>#6 票数:2

Zip4j完全使用Java代码,而没有任何本机代码的支持,因此它更适合我。 Zip4j提供以下功能:

创建,添加,提取,更新,从Zip文件中删除文件

读/写受密码保护的Zip文件

支持AES 128/256加密

支持标准邮​​编加密

支持Zip64格式

支持存储(无压缩)和压缩压缩方法

从Split Zip文件创建或提取文件(例如:z01,z02,…zip)

支持Unicode文件名

进度监控器

CreatePasswordProtectedZipExample.java

import java.io.File;

import java.util.ArrayList;

import net.lingala.zip4j.core.ZipFile;

import net.lingala.zip4j.exception.ZipException;

import net.lingala.zip4j.model.ZipParameters;

import net.lingala.zip4j.util.Zip4jConstants;

public class CreatePasswordProtectedZipExample

{

public static void main(String[] args)

{

try {

//This is name and path of zip file to be created

ZipFile zipFile = new ZipFile("C:/temp/test.zip");

//Add files to be archived into zip file

ArrayList filesToAdd = new ArrayList();

filesToAdd.add(new File("C:/temp/test1.txt"));

filesToAdd.add(new File("C:/temp/test2.txt"));

//Initiate Zip Parameters which define various properties

ZipParameters parameters = new ZipParameters();

parameters.setCompressionMethod(P_DEFLATE); // set compression method to deflate compression

//DEFLATE_LEVEL_FASTEST - Lowest compression level but higher speed of compression

//DEFLATE_LEVEL_FAST - Low compression level but higher speed of compression

//DEFLATE_LEVEL_NORMAL - Optimal balance between compression level/speed

//DEFLATE_LEVEL_MAXIMUM - High compression level with a compromise of speed

//DEFLATE_LEVEL_ULTRA - Highest compression level but low speed

parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);

//Set the encryption flag to true

parameters.setEncryptFiles(true);

//Set the encryption method to AES Zip Encryption

parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);

//AES_STRENGTH_128 - For both encryption and decryption

//AES_STRENGTH_192 - For decryption only

//AES_STRENGTH_256 - For both encryption and decryption

//Key strength 192 cannot be used for encryption. But if a zip file already has a

//file encrypted with key strength of 192, then Zip4j can decrypt this file

parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);

//Set password

parameters.setPassword("howtodoinjava");

//Now add files to the zip file

zipFile.addFiles(filesToAdd, parameters);

}

catch (ZipException e)

{

e.printStackTrace();

}

}

}

===============>>#7 票数:2

Spring Boot控制器,将文件压缩到一个目录中,并且可以下载。

@RequestMapping(value = "/files.zip")

@ResponseBody

byte[] filesZip() throws IOException {

File dir = new File("./");

File[] filesArray = dir.listFiles();

if (filesArray == null || filesArray.length == 0)

System.out.println(dir.getAbsolutePath() + " have no file!");

ByteArrayOutputStream bo = new ByteArrayOutputStream();

ZipOutputStream zipOut= new ZipOutputStream(bo);

for(File xlsFile:filesArray){

if(!xlsFile.isFile())continue;

ZipEntry zipEntry = new ZipEntry(xlsFile.getName());

zipOut.putNextEntry(zipEntry);

zipOut.write(IOUtils.toByteArray(new FileInputStream(xlsFile)));

zipOut.closeEntry();

}

zipOut.close();

return bo.toByteArray();

}

===============>>#8 票数:2

这是从源文件创建zip文件的方式:

String srcFilename = "C:/myfile.txt";

String zipFile = "C:/myfile.zip";

try {

byte[] buffer = new byte[1024];

FileOutputStream fos = new FileOutputStream(zipFile);

ZipOutputStream zos = new ZipOutputStream(fos);

File srcFile = new File(srcFilename);

FileInputStream fis = new FileInputStream(srcFile);

zos.putNextEntry(new ZipEntry(srcFile.getName()));

int length;

while ((length = fis.read(buffer)) > 0) {

zos.write(buffer, 0, length);

}

zos.closeEntry();

fis.close();

zos.close();

}

catch (IOException ioe) {

System.out.println("Error creating zip file" + ioe);

}

===============>>#9 票数:1

单个文件:

String filePath = "/absolute/path/file1.txt";

String zipPath = "/absolute/path/output.zip";

try (ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipPath))) {

File fileToZip = new File(filePath);

zipOut.putNextEntry(new ZipEntry(fileToZip.getName()));

Files.copy(fileToZip.toPath(), zipOut);

}

多个文件:

List filePaths = Arrays.asList("/absolute/path/file1.txt", "/absolute/path/file2.txt");

String zipPath = "/absolute/path/output.zip";

try (ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipPath))) {

for (String filePath : filePaths) {

File fileToZip = new File(filePath);

zipOut.putNextEntry(new ZipEntry(fileToZip.getName()));

Files.copy(fileToZip.toPath(), zipOut);

}

}

===============>>#10 票数:1

您必须主要创建两个功能。 第一个是writeToZipFile(),第二个是createZipfileForOutPut ....然后调用createZipfileForOutPut('。zip文件名')...…

public static void writeToZipFile(String path, ZipOutputStream zipStream)

throws FileNotFoundException, IOException {

System.out.println("Writing file : '" + path + "' to zip file");

File aFile = new File(path);

FileInputStream fis = new FileInputStream(aFile);

ZipEntry zipEntry = new ZipEntry(path);

zipStream.putNextEntry(zipEntry);

byte[] bytes = new byte[1024];

int length;

while ((length = fis.read(bytes)) >= 0) {

zipStream.write(bytes, 0, length);

}

zipStream.closeEntry();

fis.close();

}

public static void createZipfileForOutPut(String filename) {

String home = System.getProperty("user.home");

// File directory = new File(home + "/Documents/" + "AutomationReport");

File directory = new File("AutomationReport");

if (!directory.exists()) {

directory.mkdir();

}

try {

FileOutputStream fos = new FileOutputStream("Path to your destination" + filename + ".zip");

ZipOutputStream zos = new ZipOutputStream(fos);

writeToZipFile("Path to file which you want to compress / zip", zos);

zos.close();

fos.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

===============>>#11 票数:0

如果要在不使用软件的情况下进行解压缩,最好使用此代码。 带有pdf文件的其他代码在手动解压缩时发送错误

byte[] buffer = new byte[1024];

try

{

FileOutputStream fos = new FileOutputStream("123.zip");

ZipOutputStream zos = new ZipOutputStream(fos);

ZipEntry ze= new ZipEntry("file.pdf");

zos.putNextEntry(ze);

FileInputStream in = new FileInputStream("file.pdf");

int len;

while ((len = in.read(buffer)) > 0)

{

zos.write(buffer, 0, len);

}

in.close();

zos.closeEntry();

zos.close();

}

catch(IOException ex)

{

ex.printStackTrace();

}

===============>>#12 票数:0

由于花了我一段时间才弄清楚,所以我认为使用Java 7+ ZipFileSystem发布解决方案会有所帮助

openZip(runFile);

addToZip(filepath); //loop construct;

zipfs.close();

private void openZip(File runFile) throws IOException {

Map env = new HashMap<>();

env.put("create", "true");

env.put("encoding", "UTF-8");

Files.deleteIfExists(runFile.toPath());

zipfs = FileSystems.newFileSystem(URI.create("jar:" + runFile.toURI().toString()), env);

}

private void addToZip(String filename) throws IOException {

Path externalTxtFile = Paths.get(filename).toAbsolutePath();

Path pathInZipfile = zipfs.getPath(filename.substring(filename.lastIndexOf("results"))); //all files to be stored have a common base folder, results/ in my case

if (Files.isDirectory(externalTxtFile)) {

Files.createDirectories(pathInZipfile);

try (DirectoryStream ds = Files.newDirectoryStream(externalTxtFile)) {

for (Path child : ds) {

addToZip(child.normalize().toString()); //recursive call

}

}

} else {

// copy file to zip file

Files.copy(externalTxtFile, pathInZipfile, StandardCopyOption.REPLACE_EXISTING);

}

}

===============>>#13 票数:0

public static void zipFromTxt(String zipFilePath, String txtFilePath) {

Assert.notNull(zipFilePath, "Zip file path is required");

Assert.notNull(txtFilePath, "Txt file path is required");

zipFromTxt(new File(zipFilePath), new File(txtFilePath));

}

public static void zipFromTxt(File zipFile, File txtFile) {

ZipOutputStream out = null;

FileInputStream in = null;

try {

Assert.notNull(zipFile, "Zip file is required");

Assert.notNull(txtFile, "Txt file is required");

out = new ZipOutputStream(new FileOutputStream(zipFile));

in = new FileInputStream(txtFile);

out.putNextEntry(new ZipEntry(txtFile.getName()));

int len;

byte[] buffer = new byte[1024];

while ((len = in.read(buffer)) > 0) {

out.write(buffer, 0, len);

out.flush();

}

} catch (Exception e) {

log.info("Zip from txt occur error,Detail message:{}", e.toString());

} finally {

try {

if (in != null) in.close();

if (out != null) {

out.closeEntry();

out.close();

}

} catch (Exception e) {

log.info("Zip from txt close error,Detail message:{}", e.toString());

}

}

}

===============>>#14 票数:0

给定exportPath和queryResults作为String变量,以下块在exportPath下创建了一个results.zip文件, exportPath queryResults的内容写入到zip内的results.txt文件中。

URI uri = URI.create("jar:file:" + exportPath + "/results.zip");

Map env = Collections.singletonMap("create", "true");

try (FileSystem zipfs = FileSystems.newFileSystem(uri, env)) {

Path filePath = zipfs.getPath("/results.txt");

byte[] fileContent = queryResults.getBytes();

Files.write(filePath, fileContent, StandardOpenOption.CREATE);

}

===============>>#15 票数:0

使用Jeka https://jeka.dev JkPathTree,这非常简单。

Path wholeDirToZip = Paths.get("dir/to/zip");

Path zipFile = Paths.get("file.zip");

JkPathTree.of(wholeDirToZip).zipTo(zipFile);

ask by Ashish Agarwal translate from so

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。