Hallo Ihr lieben ich habe ein kleines problem... :-( kann mir jemand helefen?
Ich soll ein Verzeichnis auf bestimmte Dateiendungen Überprüfen dann 4-8 Zeichen in ein Array speichern, abschliesend sortieren und Vergleichen ob die nummer fortlaufen sind. Bin beim Schreiben in ein Array stecken geblieben. Hier ist mein Code:
Java:
importjava.io.*;/**
*
class AWS_dateiNamen {
private static int b;
private static int[] zahlen;
private static int v;
private static int i;
public static void auflisten() {
File dir = new File("C:/test");
String[] fileList = dir.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File(dir, name).isFile()
&& name.endsWith(".txt")
&& name.startsWith("tnx_");
}
});
for (String f : fileList) {
v++;
zahlen = new int[v];
String a = f.substring(4, 8);
b = Integer.parseInt(a);
zahlen[i] = b;
//System.out.println("Zahl: " + zahlen[i]);
}
}
public static void main(String[] args) {
auflisten();
java.util.Arrays.sort(zahlen);
}
}
also ohne deinen genauen Fehler wird dir keiner weiterhelfen können... aber wahrscheinlich ist es weil du "zahlen = b;" i gar keinen wert zuweisst oder übersehe ich gerade was ^^
am Anfang rausnehmen. So ist der Code auskommentiert, das funktioniert dann natürlich nicht :joke:
Mal im ernst: Was geht denn genau nicht? Wie heißen die Dateien, und was wird bei dem
System.out.println("Zahl: " + zahlen);
ausgegeben?
EDIT: @pl4gu33 Stimmt, ein
i++;
ans Ende der Schleife könnte schon helfen. Trotzdem sollten da immer die richtigen Zahlen ausgegeben werden (alle am Index 0, aber trotzdem die richtigen... )
EDIT: @pl4gu33 Stimmt, ein
i++;
ans Ende der Schleife könnte schon helfen. Trotzdem sollten da immer die richtigen Zahlen ausgegeben werden (alle am Index 0, aber trotzdem die richtigen... )
Sorry wegen unvolständigkeit. Ich werde es auflisten:
Ich lese die Dateinamen aus verzeichnis c:/test und nur Dateinamen die mit "tnx_" anfangen und mit .txt enden. Das klappt auch.
Dateinamen sehen so aus "tnx_2345_7827374623_jdhdg.txt" wo 2345 fortlaufende nummer ist.
Dann nehme ich aus Dateinemen 4 bis 8 stelle (also die fortlaufende zahlen) und wandle ich die in integer. Das klappt auch.
Jetzt etwas was nicht klappt:
diese wert (also fortlaufende nummer integer ) will ich in eine Array schreiben.
dann überprüfen ob die datein wirklich fortlaufend nummeriert sind.
Anbei nochmal mein Code:
Java:
importjava.io.*;classAWS_dateiNamen{privatestaticint b;privatestaticint[] zahlen;privatestaticint v;privatestaticint i;publicstaticvoidauflisten(){File dir =newFile("C:/test");String[] fileList = dir.list(newFilenameFilter(){@Overridepublicbooleanaccept(File dir,String name){returnnewFile(dir, name).isFile()&& name.endsWith(".txt")&& name.startsWith("vhs_");}});for(String f : fileList){
v++;
zahlen =newint[v];String a = f.substring(4,8);
b =Integer.parseInt(a);
zahlen[i]= b;System.out.println("Zahl: "+ zahlen[i]);}}publicstaticvoidmain(String[] args){auflisten();
java.util.Arrays.sort(zahlen);}}
Du erstellst bei jedem File das du überprüfst ein neues leeres array und setzt darin das Element Nummer i (wobei du i nirgends initialisierst, also immer das 0-te) auf deine Nummer.
Erstell doch gleich vor deiner Schleife ein Array der Länge fileList.length oder nimm eine ArrayList oder einen Vector.
int lastZahl =-1;for(int zahl : zahlen){if(lastZahl !=-1&& zahl != lastZahl +1){System.out.println(""+ zahl +" folgt auf "+ lastZahl +". Das ist nicht korrekt!");}
lastZahl = zahl;}