binarni rezim bezi zda se v poradku :/
Příspěvky odeslané z IP adresy 149.255.82.–
Mám script na sosání souborů z FTP ale ve chvíli kdy sosnu např .jar soubro, nebo .zip soubor tak se stáhne špatně, má odlišnou velikost (staženej soubor je větší než původní o.O) a jar nejde otevřít a zip je poškozenej a nejde rozbalit...
Díky za pomoc...
package cplauncher.net;
import cplauncher.Launcher;
import cplauncher.var;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.io.CopyStreamEvent;
import org.apache.commons.net.io.CopyStreamListener;
public class ftp {
private static FileOutputStream fos;
public static long size;
public static String f;
public static boolean download(String file)
{
String user,pass,host;
f = file;
user = "...";
pass = "...";
host = "...";
FTPClient client = new FTPClient();
client.setCopyStreamListener(createListener());
FTPClientConfig config = new FTPClientConfig();
config.setLenientFutureDates(true);
client.configure(config);
try {
client.connect(host); //Lognem FTP
client.login(user, pass);
for(FTPFile info : client.listFiles()) //Vycucnem soubory a zjistíme si velikost souboru co potřebujem
{
System.err.print(info.getName());
System.err.print(" - ");
System.err.print(info.getSize());
System.err.print("\n");
if(info.getName().equals(file))
{
size = info.getSize();
}
}
fos = new FileOutputStream(var.launcherTemp+"\\"+file); //Vytvoříme novej filestream pro soubor co budem sosat
Launcher.infotxt.setText("Začínám stahovat "+file);
boolean retrieveFile = client.retrieveFile(file, fos); //sosnem novej fajl
fos.close();
client.disconnect();
return retrieveFile; //az bude soslej, vratime true
} catch (IOException e) {
} finally {
try {
client.disconnect();
} catch (IOException e) {
}
}
return false;
}
private static CopyStreamListener createListener(){
return new CopyStreamListener(){
private long megsTotal = 0;
@Override
public void bytesTransferred(CopyStreamEvent event) {
bytesTransferred(event.getTotalBytesTransferred(), event.getBytesTransferred(), event.getStreamSize());
}
@Override
public void bytesTransferred(long totalBytesTransferred,
int bytesTransferred, long streamSize) {
long megs = totalBytesTransferred / 1000000;
double prec,tr,si;
int p;
tr = (double)(totalBytesTransferred / 1024);
si = (double)(size/1024);
prec = (tr / si)*100;
p = (int)prec;
String infot,infoa;
infot = String.valueOf((int)tr);
infoa = String.valueOf((int)si);
for (long l = megsTotal; l < megs; l++) {
Launcher.infotxt.setText("Stahuji soubor "+ f +"[" + infot + "/" + infoa + "kB]");
System.err.print(prec);
System.err.print(" - ");
System.err.print(si);
System.err.print(" - ");
System.err.print(p);
System.err.print("\n");
Launcher.progress.setValue(p);
}
megsTotal = megs;
}
};
}
}
Zdravím,
potřebuju rozbalit archív (zip)
package cplauncher.zip;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class unzip
{
List<String> fileList;
public static void unzip(String in, String out)
{
unzip unZip = new unzip();
unZip.unZipIt(in,out);
}
public void unZipIt(String zipFile, String out){
byte[] buffer = new byte[1024];
try{
//create output directory is not exists
File folder = new File(out);
if(!folder.exists()){
folder.mkdir();
}
try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile))) {
ZipEntry ze = zis.getNextEntry();
while(ze!=null){
String fileName = ze.getName();
File newFile = new File(out + File.separator + fileName);
System.out.println("file unzip : "+ newFile.getAbsoluteFile());
new File(newFile.getParent()).mkdirs();
try (FileOutputStream fos = new FileOutputStream(newFile)) {
int len;
while ((len = zis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
}
ze = zis.getNextEntry();
}
zis.closeEntry();
}
System.out.println("Done");
}catch(IOException ex){
}
}
}
ale ve chvíli kdy zavolam unZipIt("ss.zip", "C:/data/");
tak se mi do složky data rozbalí jen jeden adresář ze zipu a jeden soubor kterej má velikost 0b...
Nevíte kde je chybka? žádnej error to nehlásá
Díky, nakonec sem využil FTPFile třídu, pomocí ní a FTPClient sem si vypsal list souborů ve složce a pomocí cyklu jsem si vypsal vždy název a velikost, pomocí podmínky si vycuc co jsem potřeboval a zapsal is velikost :)) Mužu sem hodit zdroj kdyby nekdo chtel, ale asi by to šlo jednodušeji..
Díky za pomoc
Tak sem stylem pokus-omyl rozeběhnul setCopyStreamListener, ale tím pouze zjistím pouze přenesené byty:
Takže pro lidi kterým se to někdy bude hodit:
FTPClient client = new FTPClient();
client.setCopyStreamListener(createListener()); //vytvoříme listener
private static CopyStreamListener createListener(){
return new CopyStreamListener(){
private long megsTotal = 0;
@Override
public void bytesTransferred(CopyStreamEvent event) {
bytesTransferred(event.getTotalBytesTransferred(), event.getBytesTransferred(), event.getStreamSize());
}
@Override
public void bytesTransferred(long totalBytesTransferred,
int bytesTransferred, long streamSize) {
//tu potřebuju propočítat stažený / celková velikost/*100
// - dá mi to výsledný procenta 0-100 který následně budu cpát do progres baru
}
}
};
}
Nicméně se mi nedaří zjistit celková velikost souboru ještě před tím, než to začne sosat? nejlépe bych si to dal do globalní promněný abych si ji mohl brát odkudkoliv...
Díky
zlz: Koukal sem, ale nevim jak to použít... :/ Nedaš mi prosim příklad?
Zdravim mám kod:
public static boolean download(String file)
{
String user,pass,host;
user = "...";
pass = "...";
host = "...";
FTPClient client = new FTPClient();
try {
client.connect(host);
client.login(user, pass);
fos = new FileOutputStream(file);
boolean retrieveFile = client.retrieveFile(file, fos);
return retrieveFile;
} catch (IOException e) {
} finally {
try {
client.disconnect();
} catch (IOException e) {
}
}
return false;
}
a když ho provedu (začnu stahovat soubor z ftp), tak mam v app ještě grafický progress bar (JProgressBar) a potřebuju aby ukazoval kolik se toho souboru soslo...
Díky za reakce