在我的應用程序中,我想壓縮來自給定用戶輸入的文件或文件夾。當我嘗試從JDialog獲得輸入時,這些工作正常,但如果我想嘗試讓用戶從fileChooser中選擇,我的程序將無法工作 - 它始終創建一個空的zip文件。請你能教我如何解決這個問題嗎?從JFileChooser給出的字符串的文件名不會工作
編輯:當我嘗試通過JDialog獲取文件名和輸出名時,這工作正常,但是當我想通過filechooser選擇文件名時,我無法將其傳遞給我的更多功能正確的方式。也許這可能是因爲目錄分隔符?它寫入文件名和文件路徑,但當我通過它不會工作。
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.getPath();//.replace('\\', '/');
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 fileChooser = new JFileChooser();
fileChooser.showOpenDialog(null);
File selectedFile = fileChooser.getSelectedFile();
System.out.println(selectedFile.getPath());
String dirFileName = selectedFile.getPath(); // should come from the fileChooser but isnt working
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");
}
}
編輯:我得到了它不斷變化的
prefixLength = dirFileName.lastIndexOf("/") + 1;
這個
prefixLength = dirFileName.lastIndexOf("\\") + 1;
這是什麼應該這樣做,它實際上做了什麼呢? – immibis 2015-02-06 11:00:15
所以你說的是「它應該工作,而不是它的工作」 – immibis 2015-02-06 11:01:46
權利,現在呢?如果我知道更多,我wouldnt問..但我嘗試編輯我的問題。讓我們看看 – BrainWorx 2015-02-06 11:03:06