我想在java中編寫一個應用程序,它可以將一個文件夾打包到一個zip文件中。用戶必須使用JFileChooser選擇文件夾。當我嘗試打包時,它只是創建一個zip包與連接到它應該是的文件夾。請你能告訴我爲什麼以及如何解決它?Java應用程序創建只有連詞的ZipFile
LOLZ搞笑編程社區,我不得不添加"\\"
代替"/"
而獲得前綴長度..
import java.io.*;
import java.util.zip.*;
import javax.swing.*;
import javax.swing.JFileChooser;
public class Zipper {
int prefixLength;
ZipOutputStream zipOut;
byte[] ioBuffer = new byte[4096];
public Zipper(String dirFileName, String dirFileOutput) throws Exception
{
prefixLength = dirFileName.lastIndexOf("/") + 1;
zipOut = new ZipOutputStream(new FileOutputStream(dirFileOutput + ".zip"));
createZipFrom(new File(dirFileName));
zipOut.close();
}
void createZipFrom(File dir) throws Exception
{ if (dir.exists() && dir.canRead() && dir.isDirectory())
{ File[] files = dir.listFiles();
if (files != null)
{ for (File file: files)
{ if (file.isDirectory())
{ createZipFrom(file);
}
else
{ String filePath = file.getAbsolutePath();
FileInputStream in = new FileInputStream(filePath);
zipOut.putNextEntry(new ZipEntry(filePath.substring(prefixLength)));
int bytesRead;
while ((bytesRead = in.read(ioBuffer)) > 0)
{ zipOut.write(ioBuffer, 0, bytesRead);
}
System.out.println(filePath + " added\n");
zipOut.closeEntry();
in.close();
}
}
}
}
}
public static void main(String[] args) throws Exception {
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.showSaveDialog(null);
String path=chooser.getSelectedFile().getAbsolutePath();
String dirFileName=chooser.getSelectedFile().getAbsolutePath();
String dirFileOutput = JOptionPane.showInputDialog(null, "packetname"); // thats working..
System.out.println(dirFileName);
System.out.println(dirFileOutput);
new Zipper(dirFileName, dirFileOutput);
System.out.println("package " + dirFileOutput + "." + ".zip created\n");
}
}
您是否嘗試過使用調試器來找出是什麼問題呢? – Jens 2015-02-06 12:53:37
我想我試過..我只是試圖輸出到命令行。你的意思是調試?文件名似乎是正確的唯一的事情是,文件名與「\」而不是「/」可能是問題? – muni 2015-02-06 12:56:30
那麼你會建議什麼? – muni 2015-02-06 13:20:53