Witam,
chciałem w ramach nauki inspirowany wątkami na forum odnośnie .zip i java napisać aplikacje do pakowania i rozpakowywania zipów, wszystko ładnie fajnie działa do momentu kiedy nazwy plików spakowanych zawierają "spacje". czytałem trochę na ten temat na forum https://4programmers.net/Forum/Java/156713-blad_gdy_sciezka_ze_spacja ale nie potrafię tego zastosować w moim kodzie.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class UnZip {
private static final String INPUT_ZIP_FILE = "D:\\projekty w java.zip";
private static final String OUTPUT_FOLDER = "D:\\testowe1";
private static long rozmiar;
private static long aktualnaWielkosc = 0;
public UnZip(){
try {
rozmiar = new FileInputStream(INPUT_ZIP_FILE).available();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args)
{
UnZip unZip = new UnZip();
unZip.unZipIt(INPUT_ZIP_FILE, OUTPUT_FOLDER);
}
private void unZipIt(String zipFile, String outputFolder)
{
byte[] buffer = new byte[1024];
try{
File folder = new File(OUTPUT_FOLDER);
if (!folder.exists())
{
folder.mkdir();
}
FileInputStream test = new FileInputStream(zipFile);
ZipInputStream zis = new ZipInputStream(test);
ZipEntry ze = zis.getNextEntry();
while (ze != null)
{
String fileName = ze.getName();
File newFile = new File(outputFolder + File.separator + fileName);
aktualnaWielkosc += ze.getSize();
//obliczanie ile jest % już rozpakowane
System.out.println( aktualnaWielkosc * 100 / rozmiar);
new File(newFile.getParent()).mkdirs();
FileOutputStream fos = new FileOutputStream(newFile);
int len;
while ((len = zis.read(buffer)) > 0)
{
fos.write(buffer, 0, len);
}
fos.close();
ze = zis.getNextEntry();
}
zis.closeEntry();;
zis.close();
} catch(IOException ex){
ex.printStackTrace();
}
}
}
java.io.FileNotFoundException: D:\testowe1\projekty w java.metadata (System nie może odnaleźć określonej ścieżki)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at java.io.FileOutputStream.<init>(FileOutputStream.java:162)
at UnZip.unZipIt(UnZip.java:63)
at UnZip.main(UnZip.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
w momencie gdy nie ma nigdzie spacji wszystko działa poprawnie.