FTP *.class download

Blackhole16

Bekanntes Mitglied
Hey Leute,

ich möchte ein Programm schreiben, dass sich automatisch updatet. Ich hab auch schon überlegt wie man dies erreichen könnte, jedoch schaffe ich es nicht, *.class Datein herunterzuladen ;'(

Ich habe zuerst versucht, es über URL.openStream zu schaffen:

Java:
URL url = new URL("ftp://user:pwd@host/dir/datei.end");
InputStream in = url.openStream();
		
FileOutputStream fos = new FileOutputStream("datei.end");
byte b=(byte) in.read();
while(b!=-1){
	System.out.println(b);
	fos.write(b);
	b=(byte) in.read();
}
fos.close();

Mit einer *.txt Datei lief es super, jedoch hat er bei der class nicht alles geschreiben. Ich hab herausgefunden, dass es daran liegt, dass in class Datein auch mittendrin das Byte -1 auftritt. Also hab ich weiter probiert, diesmal mit commons-net FTPClient.retrieveFile:

Java:
FTPClient ftp = new FTPClient();
ftp.connect("host");
ftp.login("user", "pwd");
	    
ftp.changeWorkingDirectory("dir");
	    
String local = "local.class";
String remote = "ftp.class";
	    

try {
   ftp.setFileTransferMode(FTPClient.ASCII_FILE_TYPE);
          
   File file = new File(local);
          
   FileOutputStream fos = new FileOutputStream(file);
           
   ftp.retrieveFile(remote, fos);
           
   fos.close();
} catch (IOException e) {
   System.out.println("Could not download file!");
   e.printStackTrace();
}
ftp.logout();
ftp.disconnect();

Damit hat er zwar genau diesselbe Datei (soweit ich verglichen hab 😉 ) heruntergeladen, jedoch wenn ich sie starte kommt die Fehlermeldung:

Exception in thread "main" java.lang.ClassFormatError: Unknown constant tag 13 in class file [local]
...
...
Could not find the man class: [local]. Programm will exit.


Was hab ich falsch gemacht?

Wie mache ich es richtig 😉 =?

mfg
BH16

PS: Ich hab bei
Java:
ftp.setFileTransferMode(FTPClient.ASCII_FILE_TYPE);
auch BINARY_FILE_TYPE, NON_PRINT_TEXT_FORMAT, STREAM_TRANSFER_MODE, und FILE_STRUCTURE ausprobiert...
 
Zuletzt bearbeitet:
Dein Problem ist nicht wirklich das -1, sondern, dass du auf byte castest. Wozu machst du dass? Die read-Methode gibt einen int zurück, und das nicht ohne Grund! Mach dein Byte zu einem Int und es läuft.

Bei Commons brauchst du natürlich Binary_file_type. Bei Ascii wandelt er die Zeilenumbrüche um, das willst du nicht.
 
Dein Problem ist nicht wirklich das -1, sondern, dass du auf byte castest. Wozu machst du dass? Die read-Methode gibt einen int zurück, und das nicht ohne Grund! Mach dein Byte zu einem Int und es läuft.

BOAH THX, geht 😉))
hab glaub ich al wieder zu weit gedacht (was als Anfänger nicht grad das beste ist...)
Bei Commons brauchst du natürlich Binary_file_type. Bei Ascii wandelt er die Zeilenumbrüche um, das willst du nicht.

hab ich auch schon probiert, lief trotzdem nicht...
eben nochmal geprüft: geht iwie nicht...

Aber das ist ja egal, mit der anderen Variante klappt es ja 😉

ALSO: Closed

mfg
BH16
 

Zurück
Oben