Einfach eine Datei nach der anderen einlesen und in den StringBuilder schreiben.wie könnte ich mehr als ein Datei in diesem Stringbuilder
Was meinst du damit?dann im computer anlegen
ich habe jetzt versucht dass wie im galileo computing und jetzt habe ich dieses CodeHallo,
schau dir mal den FileReader an und den BufferedReader an. Nützlich zum Datei einlesen
Galileo Computing :: Java ist auch eine Insel – 17 Datenströme
Galileo Computing :: Java ist auch eine Insel – 17.5 Datenströme filtern und verketten
Und hier noch ein Link zum StringBuilder.
Galileo Computing :: Java ist auch eine Insel – 4.4 Veränderbare Zeichenketten mit StringBuilder und StringBuffer
Eigentlich findest du dort alles was du brauchst.
Einfach eine Datei nach der anderen einlesen und in den StringBuilder schreiben.
Was meinst du damit?
Gruß
zerix
import java.io.*;
public class TextFilter2 implements FilenameFilter {
String eingabe;
void eingabeBekommen() throws IOException{
InputStreamReader stream= new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(stream);
System.out.println("Welcher Ordner");
this.eingabe=br.readLine();
}
public boolean accept(File arg0, String arg1) {
return false;
}
public void textDateien() throws IOException{
int zaehler=0;
StringBuilder ausgabe=new StringBuilder();
File fin = new File(this.eingabe);
for (File f : fin.listFiles()) {
if(f.getName().endsWith(".txt")){
ausgabe.append(f);
}
}
System.out.println(ausgabe);
}
public static void main (String...args) throws IOException{
TextFilter2 test= new TextFilter2();
test.eingabeBekommen();
test.textDateien();
}
}
ausgabe.append(f);
Du solltest dir nochmal den ersten Link anschauen. Du liest nämlich nicht eine Datei ein. Ich weiß nicht warum du FileFilter implementierst.
Ich würde dir vorschlagen, dass du dir mal ein kleines Beispiel schreibst und dort einfach mal eine Datei einliest.
Gruß
zerix
import java.io.*;
public class TextFilter2 implements FilenameFilter {
String eingabe;
void eingabeBekommen() throws IOException{
InputStreamReader stream= new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(stream);
System.out.println("Welcher Ordner");
this.eingabe=br.readLine();
}
public boolean accept(File arg0, String arg1) {//accept methode die prüft ob das File mit einem bestimmten String"arg1" siche beendet
//falls ja gibt die true
if(arg0.getName().endsWith(arg1)){
return true;
}
return false;
}
public void textDateien() throws IOException{// die methode die verarbeitet alles
Reader reader=null;
int zaehler=0;
StringBuilder ausgabe=new StringBuilder();//die ausgabe die am ende gezeigt werden wird
File fin = new File(this.eingabe);//das verzeichniss ,drin suchet das programm txt dateien
for (File f : fin.listFiles()) {//solange es dateien mit ende txt gibt
if(accept(f,".txt")){
reader = new FileReader( f );
int read=reader.read();
while(read!=-1)
ausgabe.append((char)read);
read=reader.read();
}
}
FileOutputStream schreibeStrom = new FileOutputStream(this.eingabe+File.separator+"zusammenfassung.txt");//neues datei erstellen drin wird den Stringbuilder
//gespeichert und nachher geschlossen um angelegt
for (int i=0; i < ausgabe.length(); i++){
schreibeStrom.write((byte)ausgabe.charAt(i));
}
schreibeStrom.close();
}
public static void main (String...args) throws IOException{
TextFilter2 test= new TextFilter2();
test.eingabeBekommen();
test.textDateien();
}
}
-Xmx128m
und wo schreibe ich diese zeile??Das liegt nicht direkt an deinem Programm.
Es liegt daran, dass die VM default maximal nur 64 MB RAM verwendet und wenn du Dateien einliest die größer sind, kommt dieser Fehler.
Also wenn es wirklich sein muss, dass du die Dateien komplett in den Speicher liest, musst du den Speicher der VM erhöhen.
Das tust du so
Code:-Xmx128m
Hier steht die 128 für die Größe und m für die Einheit hier MB.
Gruß
zerix
Das ist ein Argument für die VM. Wenn du von der Konsole aus startest
Code:java -Xmx128m deineclass
Bei Eclipse kannst du es bei den Run-Configurations angeben und bei Netbeans bei den Projekt-Properties unter Run.
Gruß
zerix