㈠ java中用ZipOutputStream進行壓縮文件,如何讓生成的壓縮文件的ZipEnity為只讀的
只讀屬性從屬於文件系統的種類,比如NTFS、FAT、EXT3等的實現方法都不一樣。
zip格式標准中,沒有規定怎麼去記錄文件屬性。就是說,即使設了屬性,解碼器也不強制需要遵守,不一定會還原成只讀文件。
目前可還原只讀屬性的解壓器都是遵守win/dos下的某種「潛規則」,把屬性放在擴展區塊extra
field中。Java可以用ZipEntry.setExtra設置這些擴展驅。
可以自己用壓縮一個只讀文件的zip,然後用ZipEntry.getExtra照抄分析出這種潛規則。
㈡ 請教JAVA 導出ZIP包 報
相信大家在開發java的時候一定會遇到要求將java工程打包成可運行的jar的需求,今天我在這篇博客中詳細講解一下生成可運行jar的兩種方法,親測完全可行。
1. 工程中不包含第三方的jar包
這種情況比較簡單,選中需要生成jar的工程,右擊-->Export,
選中java--- > JAR file,
此處要:
選中 Export generated class files and resources;
選中 Compress the contents of the JAR file;
選中 Overwrite existing files without warning;
然後「Next」,
選中 Export class files with compile errors;
選中 Export class files with compile warnings;
點擊「Next」,
選擇「Main class」,then 「finish」 OK。
運行jar包的方法:
cmd,進入jar包所在的位置,運行命令 java -jar *.jar,就可以了。或者直接配置文件關聯。
2.工程包含第三方的jar包時
如果工程中包含第三方的jar包時,安裝上面的方法生產的jar包,在運行時會報java.lang.NoClassDefFoundError的錯,經過google, 很多網站之後,發現需要安裝eclipse的插件,插件地址是:http://sourceforge.net/projects/fjep/ 下載的文件是「net.sf.fjep.fatjar_0.0.31.zip」,解壓縮後你會看到plugins文件夾中的net.sf.fjep.fatjar_0.0.31.jar文件(簡稱Fat jar)。
Fat jar插件的安裝方式:
把Fat jar文件拷貝到你的eclipse目錄下的plugins中..重新啟動你的eclipse平台,然後查看Window---preferences,彈出的窗口中有Fat jar preferences這一項則說明你已經安裝成功了,沒有這一項則未安裝成功,需要多做如下幾步操作:到你的eclipse目錄下的configuration---org.eclipse.update,並刪除platform.xml文件,然後重新啟動eclipse.查看Window---preferences,你會發現Fat jar:
接下來就可以生成包含第三方jar包的可運行的jar包了。
選中工程,右擊 -- > Export --- > Other --- > Fat jar Exportor,
然後,next ---> 選中要生成jar包的工程 -- > next ,
在這里需要設置Main-class,它的值是工程運行的main class,並且勾上One-JAR,點擊 next;
即是項目引用的第三方類庫,點擊「finish」,這樣就生成了包含第三方jar包的可運行的jar包。以上上在基於Eclipse 3.6.2(藍色標題欄)和Eclipse 4.2.1(紅色標題欄)的效果,如果是Eclipse 3.6以下的版本(具體的版本不確定,因為我沒有試過),在選中工程右擊後,會有Build Fat Jar,
接下來的操作大同小異了。
㈢ 如何實現將java項目中的圖片集保存為zip文件
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;public class Zip {
// 壓縮
public static void zip(String zipFileName, String inputFile)
throws Exception {
File f = new File(inputFile);
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
zipFileName));
zip(out, f, null);
System.out.println("zip done");
out.close();
} private static void zip(ZipOutputStream out, File f, String base)
throws Exception {
System.out.println("zipping " + f.getAbsolutePath());
if (f != null && f.isDirectory()) {
File[] fc = f.listFiles();
if (base != null)
out.putNextEntry(new ZipEntry(base + "/"));
base = base == null ? "" : base + "/";
for (int i = 0; i < fc.length; i++) {
zip(out, fc[i], base + fc[i].getName());
}
} else {
out.putNextEntry(new ZipEntry(base));
FileInputStream in = new FileInputStream(f);
int b;
while ((b = in.read()) != -1)
out.write(b);
in.close();
}
} // 解壓
public static void unzip(String zipFileName, String outputDirectory)
throws Exception {
ZipInputStream in = new ZipInputStream(new FileInputStream(zipFileName));
ZipEntry z;
while ((z = in.getNextEntry()) != null) {
String name = z.getName();
if (z.isDirectory()) {
name = name.substring(0, name.length() - 1);
File f = new File(outputDirectory + File.separator + name);
f.mkdir();
System.out.println("MD " + outputDirectory + File.separator
+ name);
} else {
System.out.println("unziping " + z.getName());
File f = new File(outputDirectory + File.separator + name);
f.createNewFile();
FileOutputStream out = new FileOutputStream(f);
int b;
while ((b = in.read()) != -1)
out.write(b);
out.close();
}
}
in.close();
} public void deleteFolder(File dir) {
File filelist[] = dir.listFiles();
int listlen = filelist.length;
for (int i = 0; i < listlen; i++) {
if (filelist[i].isDirectory()) {
deleteFolder(filelist[i]);
} else {
filelist[i].delete();
}
}
dir.delete();// 刪除當前目錄
} public static void main(String[] args) {
try {
// TestZip t = new TestZip();
// t.zip("c:\\test.zip","c:\\test");
// t.unzip("c:\\test.zip","c:\\test2");
} catch (Exception e) {
e.printStackTrace(System.out);
}
}
}
㈣ 如何用java創建一個加密的壓縮包
下面的示例代碼演示如何創建zip壓縮包。
首先需要由需要壓縮的文件創建一個InputStream對象,然後讀取文件內容寫入到ZipOutputStream中。
ZipOutputStream類接受FileOutputStream作為參數。創建號ZipOutputStream對象後需要創建一個zip entry,然後寫入。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
*
* @author outofmemory.cn
*/
public class Main {
/**
* Creates a zip file
*/
public void createZipFile() {
try {
String inputFileName = "test.txt";
String zipFileName = "compressed.zip";
//Create input and output streams
FileInputStream inStream = new FileInputStream(inputFileName);
ZipOutputStream outStream = new ZipOutputStream(new FileOutputStream(zipFileName));
// Add a zip entry to the output stream
outStream.putNextEntry(new ZipEntry(inputFileName));
byte[] buffer = new byte[1024];
int bytesRead;
//Each chunk of data read from the input stream
//is written to the output stream
while ((bytesRead = inStream.read(buffer)) > 0) {
outStream.write(buffer, 0, bytesRead);
}
//Close zip entry and file streams
outStream.closeEntry();
outStream.close();
inStream.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
new Main().createZipFile();
}
㈤ java代碼實現 導出zip包,無法打開zip壓縮包
package com.lch.test;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
public class ZIP {
public static void main(String[] argv) throws Exception {
ZipFile zf = new ZipFile("E:\\wk\\LBSLEMIS201106141057\\LBSLEMIS\\test\\com\\lch\\test\\filename.zip");
for (Enumeration entries = zf.entries(); entries.hasMoreElements();) {
String zipEntryName = ((ZipEntry) entries.nextElement()).getName();
System.out.println(zipEntryName);
}
}
}
用javad 的ZipFile類的ZipEntry方法試一下 找到ZIP裡面的ZipEntry方法 讀取Zip裡面壓縮文件的內容
有可能會引用外包
你好,我不知道你說的dzp是什麼格式文件,但如果是zip的壓縮文件,可以看下我的這段代碼
ZipFile file = new ZipFile("d:\\1.zip");
ZipEntry entry = file.getEntry("1.xml"); //假如壓縮包里的文件名是1.xml
InputStream in=file.getInputStream(entry);
最後就是按照java中一貫的流的處理方式即可
可以不解壓,zip包里的一個對象就是一個ZipEntry
找到你想要的那個ZipEntry,用文流寫出來就可以了。追問通過ZipEntry,然後用流就可以讀出裡面的內容了嗎?謝謝指點!
回答/**
* 解壓
* @param root 輸出目標
* @param zipfile zip文件
*/
protected void unzip(File root, File zipfile, String file) throws Exception {
// 解壓文件不存在時返回
if (!zipfile.exists()) {
return;
}
// 釋放目錄不存時創建
if (!root.exists()) {
root.mkdirs();
}
// 釋放目錄不為目錄時返回
if (!root.isDirectory()) {
return;
}
FileInputStream fin = new FileInputStream(zipfile);
ZipInputStream zin = new ZipInputStream(fin);
ZipEntry entry = null;
while ((entry = zin.getNextEntry()) != null) {
// if (!entry.getName().endsWith(file)) {
// continue;
// }
File tmp = new File(root, entry.getName());
if (entry.isDirectory()) {
tmp.mkdirs();
} else {
byte[] buff = new byte[4096];
int len = 0;
tmp.getParentFile().mkdirs();
FileOutputStream fout = new FileOutputStream(tmp);
while ((len = zin.read(buff)) != -1) {
fout.write(buff, 0, len);
}
zin.closeEntry();
fout.close();
}
}
}
這里完整的解壓代碼。
// if (!entry.getName().endsWith(file)) {
// continue;
// }
這段打開就是只解出一個你指定的文件。
下面是測試用的。
public static void main(String[] args) throws Exception {
new CommonFiles().unzip(new File("D:\\"), new File("D:\\test.zip"),"file.txt");
}
這個例子會在D盤生成型個test文件夾,file.txt就會在裡面,(裡面也可能會有多個文件夾,這個取決於壓縮包里文件的度)
㈥ 在java中打包,為什麼要用jar,直接生成rar壓縮不可以嗎好處是什麼呀
不可以.
首先壓縮策略不同.
jar是採用zip的壓縮策略.
跟rar不一樣.
所以可以直接生成zip.然後改
後綴名
jar.
而不能直接生成rar.
這個所謂的好處..
java環境下.可以直接運行jar文件.
而不能直接運行
rar文件
...
這是顯而易見的吧.jar裡面的class能被import.
顯然rar也是不行的.....
㈦ 如何使用java壓縮文件夾成為zip包(最簡單的
import java.io.File;
public class ZipCompressorByAnt {
private File zipFile;
/**
* 壓縮文件構造函數
* @param pathName 最終壓縮生成的壓縮文件:目錄+壓縮文件名.zip
*/
public ZipCompressorByAnt(String finalFile) {
zipFile = new File(finalFile);
}
/**
* 執行壓縮操作
* @param srcPathName 需要被壓縮的文件/文件夾
*/
public void compressExe(String srcPathName) {
System.out.println("srcPathName="+srcPathName);
File srcdir = new File(srcPathName);
if (!srcdir.exists()){
throw new RuntimeException(srcPathName + "不存在!");
}
Project prj = new Project();
Zip zip = new Zip();
zip.setProject(prj);
zip.setDestFile(zipFile);
FileSet fileSet = new FileSet();
fileSet.setProject(prj);
fileSet.setDir(srcdir);
//fileSet.setIncludes("**/*.java"); //包括哪些文件或文件夾 eg:zip.setIncludes("*.java");
//fileSet.setExcludes(...); //排除哪些文件或文件夾
zip.addFileset(fileSet);
zip.execute();
}
}
public class TestZip {
public static void main(String[] args) {
ZipCompressorByAnt zca = new ZipCompressorByAnt("E:\test1.zip ");
zca.compressExe("E:\test1");
}
}
/*如果 出現ant 的 52 51 50 等版本問題 可以去找對應的ant-1.8.2.jar 我開始用的ant-1.10.1.jar 就是這個包版本高了 一直報verson 52 版本問題*/
㈧ java 如何將多個文件打包成一個zip
java 將多個文件打包成一個zip的代碼如下:
ZipOutputStream out=new ZipOutputStream(new FileOutputStream(zipFileName));
for(int i=0;i<fileList.size();i++){
String filename = (String)fileList.get(i);
File file = new File(filename);
zip(out,file);
}
out.close();
㈨ java 如何將 txt 文件 變成zip壓縮文件 求例子!!
這個要用 壓縮流類 ZipOutputStream
下面是一個例子 在D盤下有個 名字叫 demo.txt的文件.程序運行後會再D盤下生成一個demo.zip的文件,以下是代碼:
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipOutputStreamDemo {
public static void main(String args[]) throws IOException {
//定義要壓縮的文件 也就是說在D盤里有個 demo.txt 的文件(必須要有,否者會有異常,實際應用中可判斷);
File file = new File("d:" + File.separator + "demo.txt");
//定義壓縮文件的名稱
File zipFile = new File("d:" + File.separator + "demo.zip");
//定義輸入文件流
InputStream input = new FileInputStream(file);
//定義壓縮輸出流
ZipOutputStream zipOut = null;
//實例化壓縮輸出流,並制定壓縮文件的輸出路徑 就是D盤下,名字叫 demo.zip
zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
zipOut.putNextEntry(new ZipEntry(file.getName()));
//設置注釋
zipOut.setComment("www.demo.com");
int temp = 0;
while((temp = input.read()) != -1) {
zipOut.write(temp);
}
input.close();
zipOut.close();
}
}
希望能幫助樓主,建議樓主多看看JDK文檔,設計到文件的輸出什麼都在JAVA.IO包里,好好看看..
不過樓主要知道,壓縮流也是inputstream和outputstream的子類,但是並沒有定義在java.io包里,而是以一個工具類的形式出現的,但是在用的時候還是需要java.io包的支持的...