Hallo,
Mein Programm wächst langsam über meine Java Kenntnisse. Ich kann zurzeit eine Textdatei aufrufen(lesen) den Text in der Konsole schreiben, die Wörter die ich suche finden und unterstreichen!
Jetzt will ich mein Program erweitern und den Text in eine neue Datei mit den Änderungen schreiben. Den Text kann ich mit Erfolg in der Datei schreiben aber weiß nicht wie ich die änderungen auch in datei schreiben kann. die sind die Befehle :System.out.print(c); (outputChar ()) und System.out.println("\n"); (underline())
Habe ich alles richtig erklärt??Würdet mir bitte helfen ?
Code:
public class searchAlgoritmus {
private String fileName;
public void setFileName(String fileName)
{
this.fileName = fileName;
try {
reading();
} catch (IOException e) {
e.printStackTrace();
} }
public void reading()throws IOException{
FileInputStream fis = null;
BufferedInputStream bis = null;
DataInputStream dis = null;
FileWriter f1 = new FileWriter("c:/test.txt");
File file = new File(fileName);
try {
ArrayList<String> words = new ArrayList();
words.add("Page");
words.add("State");
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
dis = new DataInputStream(bis);
String line = dis.readLine();
int linem = 1;
while (line != null) {
PrintWriter out= new PrintWriter(f1);
out.println(line);
int W=words.size();
int nummer;
String suchWort="";
for (nummer = 0; nummer < W; ++nummer) {
suchWort = words.get(nummer);
underline(line,suchWort);
}
linem++;
line = dis.readLine();
}
f1.close();
fis.close();
bis.close();
dis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
private static void underline(String origLine, String searchWord) {
int i = 0;
int last = 0;
while (i >= 0) {
i = origLine.indexOf(searchWord, i);
if (i < 0)
break;
outputChar(i, last, ' ');
outputChar(searchWord.length(), 0, '-');
last = i + searchWord.length();
System.out.println("\n");
i++;
}
}
private static void outputChar(int i, int last, char c) {
for (int j = last; j < i; j++)
System.out.print(c);
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}
So ganz verstehe ich die Frage nicht - willst Du, dass das, was jetzt auf der Konsole ausgegeben wird, in einer Datei landet? Dann könntest Du per java.lang.System.setOut sämtliche Programmausgaben umleiten oder aber (m.E. besser) überall da, wo Du jetzt System.out verwendest, eine java.io.Writer als Parameter in die Methode geben und die Ausgabe auf diesen übergebenen Writer machen
outputChar muss statt System.out.print() auch sowas wie
> PrintWriter out= new PrintWriter(f1);
> out.println(line);
verwenden,
wie schon in der while-Schleife Zeile 29 solltest du aber nicht tausende PrintWriter-Objekte erzeugen (pro Ausgabe 1),
sondern nur genau EINEN PrintWriter, du hast doch auch nur EINEN FileWriter f1
Danke SlaterB. Ich habe so gemacht wie du gesagt hast aber ich bekomme fehler Meldungen !!!
Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problems:
Syntax error, insert ";" to complete Statement
Syntax error, insert "AssignmentOperator ArrayInitializer" to complete ArrayInitializerAssignement
at suchAlgoritmus.outputChar(suchAlgoritmus.java:99)
at suchAlgoritmus.underline(suchAlgoritmus.java:88)
at suchAlgoritmus.auslesen(suchAlgoritmus.java:63)
at suchAlgoritmus.setFileName(suchAlgoritmus.java:27)
at Start$1.actionPerformed(Start.java:33)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:5517)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
at java.awt.Component.processEvent(Component.java:5282)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3984)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3819)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1791)
at java.awt.Component.dispatchEvent(Component.java:3819)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
while (line != null) {
//----> file aufmachen und in file schreiben
//PrintWriter out= new PrintWriter(f1);
int W=words.size();
int nummer;
String suchWort="";
for (nummer = 0; nummer < W; ++nummer) {
suchWort = words.get(nummer);
underline(line,suchWort);
}
linem++;
line = dis.readLine();
}
f1.close();
fis.close();
bis.close();
dis.close();
...
Code:
private static void outputChar(int i, int last, char c) {
for (int j = last; j < i; j++)
//System.out.print(c);
PrintWriter out= new PrintWriter(f1);
out.println(line);
}
Da fehlen geschweifte Klammern um den Schleifenkörper.
Code:
private static void outputChar(int i, int last, char c) {
for (int j = last; j < i; j++) {
//System.out.print(c);
PrintWriter out= new PrintWriter(f1);
out.println(line);
}
}
//EDIT:
Besser wäre es aber, nicht für jedes Zeichen einen eigenen PrintWriter zu bauen, sondern das nur einmal zu machen und ihn als Parameter in die outputChar-Methode zu übergeben.
private static void outputChar(int i, int last, char c) {
try {
FileWriter f1 = new FileWriter("c:/test.txt");
PrintWriter out= new PrintWriter(f1);
for (int j = last; j < i; j++)
out.print(c);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
und was ist mit underline() Es tut mir so leit aber ich bin ein bissl verwirrt!!!