Allg. Datei in String einlesen!
-
package datei_einlesen; import java.awt.*; import java.awt.event.*; import java.applet.*; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.File; import java.io.RandomAccessFile; import java.io.*; public class v01 extends Applet { String thisLine; String inhalt=""; File f1= new File("D:/Schule/Schuljahr 03-04/Informatik/HAs/Langzeit HA/Datei_Einlesen/classes/test.txt"); public void paint(Graphics g) { lesen(); } public void lesen() { RandomAccessFile r = null; try {r = new RandomAccessFile(f1, "r"); } catch (FileNotFoundException ex) { } String s =""; try { s += r.read(); } catch (IOException ex1) { } Graphics g=getGraphics(); g.drawString(s,50,50); } }
Hatte es mal so funktioniert.
In der Datei steht nur "Hallo", mir wird allerdings ein Wert 72 im Applet angezeigt.Kann mir das jemand erklären?
Danke
Romeo-G
-
Gibt es einen bestimmten Grund, warum ihr hier mit RandomAccessFiles arbeitet? Ist das nicht unglaublich lahm? Ich würde euch raten, mit Readern zu arbeiten. Genauer gesagt mit einem BufferedReader, der mit einem FileReader erzeugt wird.
-
Ich habe jetzt mal kurz ein kleines Programm geschrieben, welches eine TextDatei einliest und ausgibt. Vielleicht hilft dir das:
import java.io.*; public class TextFileViewer { public static void main (String [] args) { if (args.length != 1) { System.out.println ("Nutzung: "); System.out.println ("java TextFileViewer Dateiname"); return; } try { BufferedReader reader = new BufferedReader(new FileReader(args[0])); BufferedWriter writer = new BufferedWriter(new PrintWriter(System.out)); while (reader.ready()) { writer.write(reader.readLine()); writer.newLine(); } reader.close(); writer.close(); } catch (IOException e) { System.out.println ("Konnte Datei nicht öffnen!"); } } }
-
Mein Problem ist genau, dass das Vorhaben auf ein Applet abgerichtet ist und nicht auf eine KOnsolenanwendung.
Und Konsolenanwendungen sind nunmal ganz anders aufgebaut als die Konsolenanwendungen. " main (String [] args) " kommt z.B. gar nicht vor.
Aber vielleicht gelingt es uns ja, dein Programm zu übertragen.
Aber das schaue ich mir mal morgen genauer an, bin zu müde.
Mann müsste wohl im wesentlichen die System.out.orintIn's durch g.drawString's ersetzen und die main - args - durch ein File Objekt ersetzen.
Soweit richtig ?
GIbt ja sowas:File test=new File("test.txt");
-
ach so, du hast ne GUI. Dann nimm doch einfach eine passende Komponente, die Strings darstellen kann. TextArea, JTextArea oder ähnliches.
-
Also ich glaub emir Readern kan man über Applets von File-Objekten nichts lesen. Aber geht das denn wirklich, wenn man sich den Stream von nem URl holt? Ich glaube/te nicht und da habe ich eine Lösung gefunden, denke ich:
Also einfach ein php-Script auf den Server, wenn man denn einen hat/mietet/wasauchimmer, welches den "Random Access" hat.
Hier ein Beispiel:
import java.awt.*; import java.net.*; import java.io.*; import java.applet.*; public class RAApplet extends Applet { TextArea output = new TextArea("", 80, 80); public void init() { setLayout(new BorderLayout()); add("Center", output); readFile(); } private final void readFile() { try { Socket socket = new Socket("localhost", 80); socket.setSoTimeout(10000); PrintStream out = new PrintStream(socket.getOutputStream()); out.print("GET /randomAccess.php?mode=r&file=test.txt\r\n"); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); String line; while ((line = in.readLine()) != null) { output.append(line+"\n"); } in.close(); out.close(); socket.close(); } catch (UnknownHostException e) { output.append("\n"+e.toString()); } catch (IOException e) { output.append("\n"+e.toString()); } } }
Also ich glaube so in der Art könnte es klappen. Zumindest habe ich bei Socketverbindungen keinen Ärger vom SecurityManager bekommen...
Und auch wenn man, wie es scheint, auch ohne solchen Umweg lesen kann, so kann man so zumindest mit Applets auch schreiben!
-
Hallo,
ich habe jetzt ne lauffähige Version hinbekommen, mit der man den Inhalt einer Datei in einem Applet darstellen kann.package datei_einlesen; import java.awt.*; import java.awt.event.*; import java.applet.*; import java.io.BufferedReader; import java.io.FileReader; import java.io.File; public class v01 extends Applet { String thisLine; String inhalt=""; File f1= new File("D:/Schule/Schuljahr 03-04/Informatik/HAs/Langzeit HA/Datei_Einlesen/classes/test.txt"); public void paint(Graphics g) { lesen(f1); } public void lesen(File f) { Graphics g=getGraphics(); try { StringBuffer buffer = new StringBuffer(); BufferedReader reader = new BufferedReader(new FileReader(f)); String line = reader.readLine(); while ( line!=null ) { buffer.append(line).append("\n"); line = reader.readLine(); } g.drawString(buffer.toString(),50,50); } catch ( Exception ex ) {} } }
Einen kleinen Schönheitsfehler hat es allerding noch.
Die test.txt-Datei sieht bei mir so aus:
1
2
3
4
5Die Ausgabe sieht dann aber so aus:
12345Wie kann ich ihm sagen, dass er nen Zeilenumbruch übernehmen soll?
-
Kannst du nicht. Ich muss dazu sagen, dass du es dir auch wirklich leichter hättest machen können. Also mit den Standardkomponenten, mit einer TextArea wäre der Inhalt korrekt ausgegeben worden. Wenn du über die Methoden von Graphics arbeitest, musst du halt den y-Wert nach jedem Zeilenumbruch explizit inkrementieren.
-
Hab's inzwischen selbst hinbekommen.
Die Funktion muss so aussehen:public void lesen(File f) { Graphics g=getGraphics(); try { StringBuffer buffer = new StringBuffer(); BufferedReader reader = new BufferedReader(new FileReader(f)); String line = reader.readLine(); int l=0; while ( line!=null ) { buffer.append(line);//.append("r"); g.drawString(buffer.toString(),50,y); y+=20; buffer.deleteCharAt(0); line = reader.readLine(); } g.drawString(buffer.toString(),50,y); } catch ( Exception ex ) {} }
Ist ja auch logisch.
Die Vorlage für meine Modifikation war für ne Konsolenanwendung geschrieben und da bewirkt das "buffer.append(line).append("\n");" nen Zeilenumbruch.
Auch wenn's nicht schön ist habe ich das Problem so umgangen, dass ich den Inhalt des Buffers lösche und neu anfange.Mhhhhh da fällt mir ein ... wenn ich nen längeren Text habe kann ich das natürlich nicht so machen.
Mhh weiter basteln.
Romeo-G
-
Okay, vielleicht sollte ich nicht nach jeder Errungenschaft posten ... aber ich habe das Problem jetzt gelöst.
Die fertige funktion müsste so aussehen:
public void lesen(File f) { Graphics g=getGraphics(); try { StringBuffer buffer = new StringBuffer(); BufferedReader reader = new BufferedReader(new FileReader(f)); String line = reader.readLine(); int l=0; while ( line!=null ) { buffer.append(line);//.append(" "); g.drawString(buffer.toString(),50,y); y+=20; buffer.delete(0,buffer.length()); line = reader.readLine(); } g.drawString(buffer.toString(),50,y); } catch ( Exception ex ) {} }
Danke für all eure Bemühungen.
Der Thread kann jetzt wohl geschlossen werden.Romeo-G