File.canRead() gibt false zurück und kann nicht gelsen werden

  • Antworten:0
Dominik
  • Forum-Beiträge: 9

13.02.2012, 18:32:53 via Website

Hallo,
ich arbeite gerade an einer FTP-Server app.
Ich brauche für den Listbefehl von FTP die .listFiles() Funktion.
Beim Listbefehl werden die einzelnen Datein in einem Verzeichnis aufgelistet und an den FTP Client gesendet.
Das funktioniert auch alles echt gut.Nur wenn jetzt eine Datenübertragung beginnt bauen viele FTP Clienten eine 2. Verbindung zum Server auf, das während dem Download noch navigiert werden kann. Dafür öffne ich einen neuen Thread der die Verbindung händelt. Das ist bei jeder neuen Verbindung so.Hier beginnt das Problem. Wird die .listFiles Funktion nun ein zweites mal aufgerufen gibt diese null zurück.Ich hab deshalb noch das ganze mit File.canRead() überprüft. Bei ersten Aufruf gibt es true zurück und beim 2 mal gibt es false zurück.

Edit: Was ich noch sagen wollte. Der Code wird statisch aufgerufen und ist keine Objektmethode.
Hier ist der Quellcode:
[code]
File[] verzeichnise;
int padding;
String datengroeße;
String line;
int laegne;

System.out.println(Uc.getMomentanesVerzeichnis().getName());
// Das Fileobjekt wird von Uc (Dem User) geholt. Weil jeder User hat ein eingenes gerade aktuelles Verzeichnis.

System.out.println(Environment.getExternalStorageState()); // Gibt mounted zurück(Beim ersten und beim zweiten Aufruf)

// Wird nicht aufgerufen. Das Verzeichnis wird hier schon früher gesetzt.Nur für den Fall das manche FTP Clienten LIST direkt nach dem einloggen
//im Server aufrufen
if(Uc.getMomentanesVerzeichnis()==null)
{
System.out.println("workdir ist null");
Uc.setMomentanesVerzeichnis(Environment.getExternalStorageDirectory());
}

System.out.println(Uc.getMomentanesVerzeichnis().getAbsolutePath());
// Gibt den ganzen Pfad des akktuellen Verzeichnis des Users korekt an

//Wird beim ersten Aufruf nicht benutzt.Bei 2. Thread gibt canRead aber false zurück
if(Uc.getMomentanesVerzeichnis().canRead()==false)
{
System.out.println("Kann nicht gelsen werden");
}

System.out.println(Uc.getMomentanesVerzeichnis().listFiles());//Gibt bei 2. Aufruf mit dem 2. Thread null zurück

verzeichnise=Uc.getMomentanesVerzeichnis().listFiles();

if(verzeichnise==null)
{
System.out.println("verzeichnise==null"); //Wird bei 2. Aufruf natürlich ausgegeben.
}

Uc.sendenControlverbindung("150 Senden"); // Ist die Benutzerverbindung, die dann die Daten zum Clienten sendet.
laegne=verzeichnise.length; // Hier gibt es dann natürlich beim 2. Aufruf eine NullPointerExeption
for(int i=0;i<laegne;i++)
{

if(verzeichnise[i].isDirectory())
{
line="drwxr-xr-x ";

}else{
line="-rw-r--r-- ";
}
line=line+"1 ";
line=line+"owner group ";
datengroeße=new Long(verzeichnise[i].length()).toString();
padding=13-datengroeße.length();
for(int k=0;k<padding;k++)
{
line=line+' ';
}
line=line+verzeichnise[i].length()+" ";
line=line+"Aug 01 14:00 ";
line=line+verzeichnise[i].getName();
System.out.println(line);
Uc.sendenDataverbindung(line);

}
Uc.sendenDataverbindung("\r\n");
Uc.stopDataverbindung();
Uc.sendenControlverbindung("226 Data transmission OK");
System.out.println("List command ist abgeschblossen");
verzeichnise=null;


[/code]

Kann mit bitte jemand helfen?

— geändert am 13.02.2012, 18:47:26

Antworten