Input/Output Speicherung über FTP-Problem

GianaSisters

Bekanntes Mitglied
Hallo Zusammen,

ich benötige dringend Hilfe beim speichern von Dateien auf einem FTP Server.
Momentan benutze ich dafür folgenden Code:

Java:
public void saveFile(String filename, String targetFileName, boolean sufPending, boolean prePending){
		FileInputStream fis;		
		try {
			 if (sufPending == true) {ftp.completePendingCommand();}
			fis = new FileInputStream(filename);
			System.out.println(new File(filename).exists());
			BufferedInputStream bis = new BufferedInputStream(fis); 
			ftp.storeFile(targetFileName, bis);
			fis.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("quelle: " + filename + " Ziel: " + targetFileName);
	}

Das blöde dabei ist schonmal, dass ich mit den Variablen "sufPending" und "prePending" (zweites ist nicht in benutzung)arbeite. Die Ursache dafür liegt daran, dass sich nach mehrmaligem Aufrufen die Verbindung (bzw das Programm sogar) aufhängt, wenn kein "ftp.completePendingCommand()" verwendet wird. Je nach belieben teste ich aus wann es notwenig ist und wann nicht. Aber so kanns ja nicht bleiben, je nach Situation ist das schwer einschätzbar.
Momentan arbeite ich mit mehreren Threads die dann fast gleichzeitig zunächst Dateien lokal speichern und später dann auf den Server transferieren sollen. Die Lokale speicherung läuft natürlich spitze, aber beim Übertragen macht er ja nach Lust und Laune das Speichern. Meine Frage: Gibt es eine saubere Lösung damit das transferieren der Dateien immer und sauber funktioniert wie es bei der lokalen Speicherung der Fall ist ? ftp ist übrigens ein FTPClient der auch schon verbunden ist.
Bitte helft mir :)
Gruss,
Giana
 
Zuletzt bearbeitet:

Plopo

Bekanntes Mitglied
Wie schauts den mit deinem FTP aus.
Du kannst nicht einfach beliebig viele Threads öffnen und Daten auf einen FTP schieben, dann macht dieser irgendwann dicht.

Du musst schaun wie viele Verbindungen dein FTP gleichzeitig zulässt.
Vll. liegt dein Problem ja da.

Das "PendingCommand" wird wahrscheinlich dafür sorgen, dass der FTP nicht deine Verindung kappt.
Nämlich nach X Sekunden Inaktivität schmeißen dich die meisten FTP-Server raus.
 

GianaSisters

Bekanntes Mitglied
Danke Plopo für die schnelle Antwort.
Ich habe beliebig viele Threads die jeweils einen Sensor einer Maschine darstellen. Aber jeder Sensor hat einen eigenen FTP-Zugang zwar auf dem selben Server aber der Username entspricht der Sensornummer und wird dann auch in das richtige Verzeichnis gelenkt. Ohne Threads hat es auch funktioniert, aber nun mit mehreren gleichzeitig kommen die Probleme.

Komisch, dass der Pending-Command scheinbar notwendig sein muss. Ich habe den Threadtimer auf 3 Sekunden gestellt, da sollte die Verbindung eigentlich in der Zeit noch bestand haben. Aber auch vorher ohne Threads war die Zeile notwendig damit gespeichert wird. Hast Du oder noch Jemand eine Idee wo ich nachgucken könnte oder idealerweise eine gute Speicherlösung parat ?
 

Plopo

Bekanntes Mitglied
Ist ja schön und gut, dass du mehrere Benutzer hast die Dateien hochladen.
Aber die IP ist wohl bei allen die gleiche, oder?
Sollte nun der FTP danach gehen (was eig. Standart ist) kappt er dir, bei zu vielen gleichzeitigen Verbindungen, auch die Verbindung.
 

GianaSisters

Bekanntes Mitglied
Wenn ich mir das Protokol anschaue, scheint er alles machen zu wollen, aber die Dateien laden sich nicht hoch, wenn ich auf das Datum gucke sind die noch von vor 1 Stunde. Ich glaube nicht, dass es was mit der Verbindung zu tun hat, sondern dass da wohl irgendeine Durchschlagskraft liegt das er nicht nur versucht die hochzuladen sondern es auch tut. Komisch...

(000020)27.06.2012 09:16:12 - mapr (127.0.0.1)> PORT 127,0,0,1,200,235
(000020)27.06.2012 09:16:12 - mapr (127.0.0.1)> 200 Port command successful
(000020)27.06.2012 09:16:12 - mapr (127.0.0.1)> STOR REPLY
(000020)27.06.2012 09:16:12 - mapr (127.0.0.1)> 150 Opening data channel for file transfer.
(000020)27.06.2012 09:16:12 - mapr (127.0.0.1)> PORT 127,0,0,1,200,236
(000020)27.06.2012 09:16:12 - mapr (127.0.0.1)> 200 Port command successful
(000019)27.06.2012 09:16:12 - tipr (127.0.0.1)> PORT 127,0,0,1,200,237
(000019)27.06.2012 09:16:12 - tipr (127.0.0.1)> 200 Port command successful
(000019)27.06.2012 09:16:12 - tipr (127.0.0.1)> STOR REPLY
(000019)27.06.2012 09:16:12 - tipr (127.0.0.1)> 150 Opening data channel for file transfer.
(000019)27.06.2012 09:16:12 - tipr (127.0.0.1)> PORT 127,0,0,1,200,238
(000019)27.06.2012 09:16:12 - tipr (127.0.0.1)> 200 Port command successful
(000020)27.06.2012 09:16:12 - mapr (127.0.0.1)> PORT 127,0,0,1,200,239
(000020)27.06.2012 09:16:12 - mapr (127.0.0.1)> 200 Port command successful
(000020)27.06.2012 09:16:12 - mapr (127.0.0.1)> STOR LIB1
(000020)27.06.2012 09:16:12 - mapr (127.0.0.1)> 150 Opening data channel for file transfer.
(000020)27.06.2012 09:16:12 - mapr (127.0.0.1)> PORT 127,0,0,1,200,240
(000020)27.06.2012 09:16:12 - mapr (127.0.0.1)> 200 Port command successful
(000019)27.06.2012 09:16:13 - tipr (127.0.0.1)> PORT 127,0,0,1,200,241
(000019)27.06.2012 09:16:13 - tipr (127.0.0.1)> 200 Port command successful
(000019)27.06.2012 09:16:13 - tipr (127.0.0.1)> STOR LIB1
(000019)27.06.2012 09:16:13 - tipr (127.0.0.1)> 150 Opening data channel for file transfer.
(000019)27.06.2012 09:16:13 - tipr (127.0.0.1)> PORT 127,0,0,1,200,242
(000019)27.06.2012 09:16:13 - tipr (127.0.0.1)> 200 Port command successful
 

Plopo

Bekanntes Mitglied
mhh es scheint so, als würde er ganicht anfangen hochzuladen.
Er möchte, nachdem ihm der "data channel" geöffnet wurde erneut einen Port öffnen.

Vielleicht gibst du deinen Threads mal einen "wait" von ein paar ms, damit der Server nicht mit Anfragen bombardiert wird :)

Oder gibt es vielleicht eine Methode die prüft ob ein "data channel" geöffnet wurde?
Dann könntest du erst die Datei loschicken, wenn er offen ist.
 

GianaSisters

Bekanntes Mitglied
Danke, dass klingt ganz gut, allerdings hab ich das selbe Problem ohne Threads wenn ich 'ftp.completePendingCommand();' weglasse... Werde aber mal schauen danke für den hinweis.
 

GianaSisters

Bekanntes Mitglied
Ich weiß nicht weiter.
Das Problem ist auch beim einfachen Laden der FTP Datei. Der Aufruf:
Java:
	int handshake_c = Integer.parseInt(sign.getConnection().loadFile("C", true, false));
läd die Datei korrekt (Datei hat nur eine 0 oder 1 von daher das parsen). Setze ich den Suffix auf false (
Java:
int handshake_c = Integer.parseInt(sign.getConnection().loadFile("C", false, false)); )
kommt folgender Fehler:
Exception in thread "Thread-6" java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:61)
at java.io.InputStreamReader.<init>(InputStreamReader.java:55)
at de.almoconsult.kommsrv.simulator.system.NisFtpClient.loadFile(FtpClient.java:179)


geht man ins Detail findet man im FtpClient folgendes:
Java:
public String loadFile(String filename, boolean suf, boolean pre){
		InputStream filestream = null;
		BufferedReader reader1 = null;
		String line;
		String fullString = "";

		try {	
		 if (suf == true) { ftp.completePendingCommand(); }
			filestream = ftp.retrieveFileStream(filename);
			reader1 = new BufferedReader(new InputStreamReader(filestream));

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
		try {
			while ((line = reader1.readLine()) != null)
			{	
				fullString = fullString + line;	
			}
			reader1.close();
			filestream.close();	
		if (pre == true) { ftp.completePendingCommand(); }
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return fullString;

	}

Der Fehler steckt in der Zeile:
Java:
reader1 = new BufferedReader(new InputStreamReader(filestream));
. Wieso ist hier eine NullPointerExeption, und wenn suf = true ist nicht, welches ja nur diesen Pendingbefehl ausfürt.
Bitte bitte helft mir :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
HorstSchröder Speicherung des Testzeitpunkts Java Basics - Anfänger-Themen 3
A Fehler bei der Speicherung von JOptionPane-Eingaben Java Basics - Anfänger-Themen 4
N Probleme bei Speicherung eines Integer-Array in Datei speichern Java Basics - Anfänger-Themen 3
fLooojava Speicherung einer Usereingabe Java Basics - Anfänger-Themen 2
S Input/Output Datei für Speicherung von Variablen Java Basics - Anfänger-Themen 5
L Persistente Speicherung Java Basics - Anfänger-Themen 19
Guybrush Threepwood Effizientester Datentyp zur Speicherung einer ungeordneten Menge von ints Java Basics - Anfänger-Themen 8
B Probleme bei XML-Speicherung Java Basics - Anfänger-Themen 7
N Sequentielle Speicherung Java Basics - Anfänger-Themen 2
A begrenzte Datenstruktur zur Speicherung von bytes Java Basics - Anfänger-Themen 6
F Speicherung von Werten?!? Java Basics - Anfänger-Themen 7
H Speicherung mit XML Java Basics - Anfänger-Themen 3
G Listenartige Speicherung verschiedener Objekte Java Basics - Anfänger-Themen 5
C JTable und dynamische Speicherung Java Basics - Anfänger-Themen 2
D speicherung Java Basics - Anfänger-Themen 8
E Programm zu Speicherung von Daten ---Totaler Anfänger Java Basics - Anfänger-Themen 7
G Speicherung von Referenzen auf Instanzen Java Basics - Anfänger-Themen 5
richis-fragen GlassPane über JScrollPane legen Java Basics - Anfänger-Themen 6
A Server - Client Nachrichtenaustausch über Eventbus Java Basics - Anfänger-Themen 12
P Neue Java v8 JRE Version nicht über alte drüber installierbar: Wie sonst? Java Basics - Anfänger-Themen 7
D Downloadfortschritt von Datei über Google Drive API v3 Java Basics - Anfänger-Themen 10
B großzügiges Pixelraster über Bildschirm legen Java Basics - Anfänger-Themen 7
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
L Beim Java Programmstart, mehrere Parameter über die Kommandozeile übergeben Java Basics - Anfänger-Themen 9
sserio Iterierung über ein zweidimensionales Array Java Basics - Anfänger-Themen 16
H Eine Methode über Actionlistener beenden Java Basics - Anfänger-Themen 8
S Java über SSH Java Basics - Anfänger-Themen 13
X Wie erreiche ich, dass ein Robot weitere Attribute hat, die nicht materialisiert sind, sondern nur über get/ set-Methoden simuliert sind? Java Basics - Anfänger-Themen 1
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
D Best Practice Ausgabe über direkte Ausgabe oder try-catch? Java Basics - Anfänger-Themen 13
R Eigenschaft über Parameter auslesen und ändern Java Basics - Anfänger-Themen 15
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
W char über die Konsole? Java Basics - Anfänger-Themen 7
EchtKeineAhnungManchmal Hallo :) ich bekomme es nicht hin eine Fehlermeldung auszugeben über die GUI Java Basics - Anfänger-Themen 3
S Array über ein Ausgabemethode in main ausgeben Java Basics - Anfänger-Themen 31
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
J Wert zurückgeben über get Methode Java Basics - Anfänger-Themen 8
J Eintrag Combobox über einen String auswählen Java Basics - Anfänger-Themen 3
A Array Ansprache einer Zelle über Punktnotation? Java Basics - Anfänger-Themen 3
O Java über cmd benutzen ? Java Basics - Anfänger-Themen 5
J Variablenzugriff über string Java Basics - Anfänger-Themen 18
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
H Methode über String Wert aufrufen Java Basics - Anfänger-Themen 8
M Java Kompilieren über Package grenzen hinaus Java Basics - Anfänger-Themen 4
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
Tino1993 Ellipse über draw Funktion ohne spur wandern lassen Java Basics - Anfänger-Themen 6
M Mehrere Datenbank zugriffe über tomee.xml regeln? Java Basics - Anfänger-Themen 1
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
J Array über Getter erlangen Java Basics - Anfänger-Themen 34
S While-Schleife geht in Endlosschleife über, warum? Java Basics - Anfänger-Themen 6
B OOP-Anfänge über CMD + Editor Java Basics - Anfänger-Themen 30
G Variablen Array Länge über den Konstruktor definieren Java Basics - Anfänger-Themen 4
L Addition von Arrays über die Parameterliste Java Basics - Anfänger-Themen 11
C Datei über relative Pfade einlesen Java Basics - Anfänger-Themen 6
1 Erste Schritte Was denkt ihr über eines meiner ersten Javaprogramme? Java Basics - Anfänger-Themen 2
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
J Button über Pfeiltasten bewegen Java Basics - Anfänger-Themen 8
E Objekt durch Benutzer über Konsole erzeugen - Java Java Basics - Anfänger-Themen 3
N Eingabe Kommazahlen über Scanner Java Basics - Anfänger-Themen 2
T DoWhile Schleife über mehrere Mothoden Java Basics - Anfänger-Themen 5
C Collections List über Interface zugreifen Java Basics - Anfänger-Themen 32
J Gefilterten Stream über die Konsole ausgeben Java Basics - Anfänger-Themen 1
S Variablen Klassenvariable über Objekt aufrufen Java Basics - Anfänger-Themen 16
S Bilder über Socket Senden Java Basics - Anfänger-Themen 1
K Textdatei auslesen und über Mqtt schicken Java Basics - Anfänger-Themen 4
L Iterieren über eine CSV Datei Java Basics - Anfänger-Themen 7
I GUI über Eclipse oder NetBeans Java Basics - Anfänger-Themen 23
S Klassenaufruf über JFrame Button Java Basics - Anfänger-Themen 3
Java The Hutt SetWerte über verschiedene Klassen Java Basics - Anfänger-Themen 16
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
O Methode über Leerzeichen Java Basics - Anfänger-Themen 13
I OOP Objektnamen über die Konsole richtig einlesen Java Basics - Anfänger-Themen 9
A Variablen Variablenwert über Konstruktor ändern Java Basics - Anfänger-Themen 3
J MySQL Datumsabfrage über ResultSet in Java-Servlet Java Basics - Anfänger-Themen 4
CptK Interface Bilder über Bildschirm bewegen, bis der Abstand zum vorherigen zu groß wird Java Basics - Anfänger-Themen 13
dapzoo Class File Version zu niedrig? Ausführen über Eingabeaufforderung nicht möglich Java Basics - Anfänger-Themen 14
J Punkt auf,über,unter oder zwischen 2 Geraden Java Basics - Anfänger-Themen 14
CptK Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
R Keine Verbindung zu MySql über Netbeans Java Basics - Anfänger-Themen 15
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
J Aufruf einer Methode über einen String Java Basics - Anfänger-Themen 11
G Arraynamen über eine Schleife ansprechen Java Basics - Anfänger-Themen 4
S Bild über JButton legen Java Basics - Anfänger-Themen 3
temi Druckeransteuerung über ESC-Sequenz Java Basics - Anfänger-Themen 21
M Methodenaufruf über SQL UPDATE Java Basics - Anfänger-Themen 8
B Könnte jemand über dieses jurze Javaprogramm schauen? Irgendwas funktioniert mit der z-Varible nicht Java Basics - Anfänger-Themen 2
M Java Programm über Batch-Datei ausführen Java Basics - Anfänger-Themen 1
E Wie Passwort-Eingabe (ohne Echo!) über Konsole ? Java Basics - Anfänger-Themen 4
C Erste Schritte Fehler beim *.class Aufruf über cmd.exe Java Basics - Anfänger-Themen 9
R Fragen über den Konstruktor Java Basics - Anfänger-Themen 0
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
P Threads Prozess kann nicht über die GUI gestartet werden Java Basics - Anfänger-Themen 8
T CMD über Java-Programm aufrufen Java Basics - Anfänger-Themen 2
X Finde die Files über FTP nicht Java Basics - Anfänger-Themen 4
J Methode über Scanner aufrufen Java Basics - Anfänger-Themen 15
P Programm kann über CMD nicht ausgeführt werden Java Basics - Anfänger-Themen 2
E Frage über Speichern und Ausgabe Java Basics - Anfänger-Themen 7
J Verschieden Fragen über Java Programmierung Java Basics - Anfänger-Themen 3
X Betriebssytem interne Consolen Commands über Java starten Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben