Input/Output read/write

kantaki

Mitglied
Hallo,

ich bin es schon wieder :-/

undzwar möchte ich aus einer .txt datei string herauslesen und später wieder in eine .txt schreiben.

wenn ich in java nach input output suche sehe ich 1000 verschiedene möglichkeiten scanner, FileReader, FileInputStream. und ich fühle mich ein wenig überfordert.

welches package sollte ich dafür verwenden ?

und gibt es in java eine alternative für getline(c++) ?

zb ich habe den string

1000,500,120

den möchte ich aufsplitten in
string a = "1000", b="500",c="120";
 

Xeonkryptos

Bekanntes Mitglied
Zum einfachen Ein-/Auslesen einer Text-Datei empfielt sich [JAPI]FileReader[/JAPI] und [JAPI]FileWriter[/JAPI]. Diese packst du einfach in einen [JAPI]BufferedReader[/JAPI] und [JAPI]BufferedWriter[/JAPI] und schon kannst du alles einlesen.

Für das Splitten empfehle ich dir die Methode: split. Mit dieser Methode splittest du, wie in deinem Beispiel, nach dem Komma und fügst die Ergebnisse in ein Array ein. Diese kannst du entweder dann normalen String-Variablen zuweisen oder einfach das String-Array weiternutzen.

Edit: Eine Methode mit der du die Zeilennummer bekommst ist mir jetzt nicht bekannt, aber mit einem BufferedReader und der Methode readLine() + einer Counter-Variable kannst du auch die Zeilen herausfinden.
 

z-mon

Bekanntes Mitglied
Hallo kantaki,

eine Mögliche Umsetzung wäre folgendes:

Java:
public static void main(String[] args) throws FileNotFoundException {
		File inputFile = new File("src/hallo.txt");
		Scanner scanner = new Scanner(inputFile);

		while (scanner.hasNextLine()) {
			String row = scanner.nextLine();
			System.out.println(row);
			String[] splitter = row.split(";");

			for (String item : splitter) {
				System.out.println(item);
			}
		}
	}

Ich hoffe es hilft dir.

Grüße
 

kantaki

Mitglied
ähm kann ich die eingelesenen strings auch direkt splitten?


zb meine text datei sieht so aus

Java:
123,4567,123
4566,4444,5678
435,665,678
4000,2000,1000
123,4567,123
4566,4444,5678
435,665,678
4000,2000,1000
123,4567,123
4566,4444,5678
435,665,678
4000,2000,1000
123,4567,123
4566,4444,5678
435,665,678
4000,2000,1000

Java:
class Coords {
int x;
int y;
int z;
.....

so das ich einfach beim einlesen objekte erstelle zb.
Coords o = new Coords();
o.x=123;
o.y=4567;
o.z=123;
und dieses objekt in eine arraylist speichere, so das ich später einfach per
list[0].x list[0].y list[0].z an meine werte herankomme.

hoffe ich habe das nich komplett verwirrend erklärt


edit : oh so viele neue antworten

okay super vielen dank für die schnellen antworten <3
ich denke ich weiß was zu tun ist.
 
Zuletzt bearbeitet:

Xeonkryptos

Bekanntes Mitglied
so das ich einfach beim einlesen objekte erstelle zb.
Coords o = new Coords();
o.x=123;
o.y=4567;
o.z=123;
und dieses objekt in eine arraylist speichere, so das ich später einfach per
list[0].x list[0].y list[0].z an meine werte herankomme.

Mit einer ArrayList würde der Versuch des Aufrufs scheitern, da eine ArrayList etwas anderes als ein Array ist. Sie ist dynamisch und hat keine feste Größe, zumindest verändert sich die Größe, sofern sie an ihre Grenzen kommt!

Funktionieren würde es. Nur musst du bei jedem neuen Zeilenaufruf ein neues Objekt erstellen und je nach der Größe der TextDatei könnte es zu einer StackOverFlowException kommen.

Du müsstest in diesem Fall erstmal mit einem Array arbeiten, welches die gesplitteten Koordinaten enthält. Diese liest du dann in deine Koordinaten um.
o.x = coords[0]; o.y = coords[1]; o.z = coords[2];
Das wäre erstmal der Anfang NACH dem Split!! Und dann spielst du dieses Objekt einfach in deine ArrayList ein. Bedenke, dass eine ArrayList KEIN Array ist. Es verhält sich wie ein Array hat aber seine Besonderheiten und Vorteile gegenüber eines Arrays!
 

kantaki

Mitglied
okay das ist doof
ich kenne halt nur in c++ den vector damit wäre das kein problem

was würdet ihr denn machen wenn ihr zb 500 zeilen und pro zeile 3 integers hättet?
wie würdet ihr sie speichern ?
 

Xeonkryptos

Bekanntes Mitglied
Eine Idee wären 3 Arrays, sofern du die genaue größe kennst(!), wie die 500 Zeilen, und jedes Array steht für eine Koordinate. xArray, yArray, zArray... Da du immer die zueinander gehörigen Koordinaten in die passende Stelle ins Array einfügst: 1. Koordinate an die erste Stelle in jedem Array, kannst du immer abfragen, welche Koordinaten zueinander gehören.

Beispiel: Du brauchst die Koordinaten von x, y und z, die an der 50. Stelle in deiner Datei standen. Dann gehst du hin und rufst in deinem Array die 49. Stelle in jedem deiner Arrays auf und hast alle Koordinaten herausbekommen.
 

kantaki

Mitglied
die genaue größe kenne ich nicht, vielleicht würde ich irgentwann die max größe wissen.

kann ich das nicht so lösen ?

Java:
ArrayList<Cords> cords = new ArrayList<Cords>();

for(int i = 0; i <5;++i)
{
Cords o = new Cords();
o.x= 2;
0.y=1;
0.z=3;
cords.add(o);
}
for(int i = 0; i <5;++i)
{
cords.get(i).x;
cords.get(i).y;
cords.get(i).z;
}
 

Xeonkryptos

Bekanntes Mitglied
Das kannst du auch so lösen, aber musst du bedenken, dass du bei irgendeiner bestimmten Größe eine StackOverFlowException bekommen kannst. In diesem Fall jetzt nicht, aber ab ein paar hundert Objekten oder so.

Je nach Größe ist das so lösbar.
 

kantaki

Mitglied
ab wann bekommt man denn eine " StackOverFlowException " ? kann ich das irgentwo nachlesen ?
ich sollte so ~1000 objekte speichern können.
edit
bist du dir ganz sicher ?
ich habe es mal gerade mit string objekten getestet
for (int i = 0; i < 1000000; i++) {
ilist.add("hallo");

}
und ich bekomme keinen overflow
 
Zuletzt bearbeitet:

Xeonkryptos

Bekanntes Mitglied
Es kommt halt auch darauf an, was du neben der Liste laufen hast. Wenn du jetzt noch eine größere GUI drumbastelst dann kommst du schneller zu dieser Exception.
StackOverflowException occurs when application's Java VM stack size is not sufficient
In Eclipse zum Beispiel kann man den Speicher anheben. Es muss nicht vorkommen, aber bei deiner Bauweise kommt es nur drauf an, wie Komplex du dieses noch machst. Kannst es ja mal testen und eine Endlosschleife machen und zählen lassen. In der Endlosschleife erstellst immer wieder ein neues Objekt. Irgendwann kommst du dann schon zu der Exception. :)

Man würde deinen Ansatz auch anderst lösen, aber jeder wie er es mag. :)
 

kantaki

Mitglied
eine frage hätte ich nocht =)

ich habe es jetzt so gemacht

Java:
public static void main(String[] args) throws FileNotFoundException {
        File inputFile = new File("src/hallo.txt");
        Scanner scanner = new Scanner(inputFile);
 
        while (scanner.hasNextLine()) {
            String row = scanner.nextLine();
            System.out.println(row);
            String[] splitter = row.split(",");
 
            for (String item : splitter) {
                System.out.println(item);
            }
        }
    }

ich lese aus einer Datei die zB so aussieht
Java:
1.23,1.45,20.20
1.23,1.45,20.20
1.23,1.45,20.20
ist es möglich die werte sofort als double zu lesen, ohne das ich die ganze line als string einlese diese splitte und einzeln in double umwandeln muss ?^^
 

Xeonkryptos

Bekanntes Mitglied
du musst diese werte erst auslesen und dann splitten, damit du sie umwandeln kannst, ansonsten versuchst du die ganze Zeile umzuwandeln, als GANZES(!) und das ist nicht möglich. du musst es hier umständlich machen.
 

kantaki

Mitglied
ja die lösunge habe ich ja schon, aber es wäre viel effizenter wenn ich den wert bis zum komma einelesen könnte zb

123.555,100.222,50.11

double[] dArray = new double[3];
for(int i = 0; i <3; ++i)
{
dArray = ZAHLBISKOMMA;
}

geht sowas ?
 

Xeonkryptos

Bekanntes Mitglied
dann müsstest es in etwa so bauen:
Java:
dArray = Double.parseDouble(zahlBisKomma.split(","));

müsste so in etwa aussehen. hab es nicht getestet und weiß net, ob es funzt. damit würdest dir aber auch die Schleife ersparen!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Threads Read-Modify-Write Problem bei Multithreading (philosopher dining problem) Java Basics - Anfänger-Themen 5
W file read write crash Java Basics - Anfänger-Themen 2
M Streams, read and write Java Basics - Anfänger-Themen 2
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
T IOStreams read(byte[]b) methode Java Basics - Anfänger-Themen 2
josfe1234 Hilfe access denied ("java.io.FilePermission" " " "read") Java Basics - Anfänger-Themen 12
C System.in.read() Boolsche Werte vergleichen Java Basics - Anfänger-Themen 8
J Variablen Komsiche System.in.read() return-value? Java Basics - Anfänger-Themen 3
V FileInputStream - read() Java Basics - Anfänger-Themen 2
W Input/Output System.in.read erzeugt nicht, was ich will Java Basics - Anfänger-Themen 1
C Input/Output System.in.read() gibt nicht -1 zurück? Java Basics - Anfänger-Themen 3
F Input/Output Blocking file read erzeugen Java Basics - Anfänger-Themen 0
G Thread stoppen mit System.in.read() Java Basics - Anfänger-Themen 13
G comport read Java Basics - Anfänger-Themen 3
B Frage zur Effizienz von read und read(byte[]) Java Basics - Anfänger-Themen 23
S Java für Anfänger: Probleme mit read() Java Basics - Anfänger-Themen 20
G Input/Output System.in.read & Scanner Java Basics - Anfänger-Themen 2
S Eigener InputStream, Hilfe bei read-Methode Java Basics - Anfänger-Themen 6
L Fehler bei "read" ? Java Basics - Anfänger-Themen 4
R ImageIO.read Fehler Java Basics - Anfänger-Themen 4
B Threads Interrupt während Socket.read()? Java Basics - Anfänger-Themen 3
G Problem mit Image.IO.read( File ) Java Basics - Anfänger-Themen 3
C FileInputStream read() Overflow Problem Java Basics - Anfänger-Themen 6
W Koordinaten mit System.in.read() setzen Java Basics - Anfänger-Themen 2
L Read.java Java Basics - Anfänger-Themen 4
F FileReader Methode Read() int? Java Basics - Anfänger-Themen 2
H int : never read - Fehler Java Basics - Anfänger-Themen 3
U Inputstream.read()/readLine() blockiert immer Java Basics - Anfänger-Themen 18
S access denied (java.io.FilePermission read) Java Basics - Anfänger-Themen 3
E Read a file in a package Java Basics - Anfänger-Themen 2
S System.in.read() Java Basics - Anfänger-Themen 2
G Verständnisfrage read() und readLine() Java Basics - Anfänger-Themen 6
C System.in.read() funktioniert nicht Java Basics - Anfänger-Themen 3
G unterschied zwischen in.read() und in.read(byte [] b, int. Java Basics - Anfänger-Themen 3
J System.in.read(): Unhandled exception type IOException Java Basics - Anfänger-Themen 12
P Read, Readline ? Java Basics - Anfänger-Themen 2
B System.in.read() wird übersprungen Java Basics - Anfänger-Themen 5
S System.in.read() mehrmals nacheinander aufrufen Java Basics - Anfänger-Themen 3
F Read access to enclosing field xy is emulated . Java Basics - Anfänger-Themen 2
R frage zur read()-Methode des BufferedReader Java Basics - Anfänger-Themen 2
J Wie geht out.read ? Java Basics - Anfänger-Themen 4
L read() (von bufferedReader) abbrechen Java Basics - Anfänger-Themen 5
L unterbrechen von bufferedReader.read() Java Basics - Anfänger-Themen 4
G System.in.read() wartet nicht auf eingabe Java Basics - Anfänger-Themen 1
M FileReader.read(char[]) - Größe des Arrays? Java Basics - Anfänger-Themen 4
R FileInputStream.read() != FileReader.read(). Pls Help Java Basics - Anfänger-Themen 5
D Text-Datei(en) mit der Methode read(bytes[] b) auslesen Java Basics - Anfänger-Themen 4
B Probleme mit Eingaben [System.in.read())] Java Basics - Anfänger-Themen 10
J Keyboard.read... Java Basics - Anfänger-Themen 4
T Anfänger: cannot read: error 1 Java Basics - Anfänger-Themen 8
A Instance methods should not write to "static" fields Java Basics - Anfänger-Themen 4
S write(), weshalb verschiedene Ausgaben? Java Basics - Anfänger-Themen 4
K exec.StdIn.Write Java Basics - Anfänger-Themen 7
B Input/Output Socket I/O - outputStream.write(-1) Java Basics - Anfänger-Themen 2
X write() und Zufallszahlen Java Basics - Anfänger-Themen 2
J FileOutputStream write Java Basics - Anfänger-Themen 19
Corben Input/Output FileOutputStream - neue Zeile mit write(10) Java Basics - Anfänger-Themen 6
F FileOutputStream.write Java Basics - Anfänger-Themen 2
M Unterschied append / write aus der Klasse Writer Java Basics - Anfänger-Themen 2
M Audio Stream läuft auf :connection abort: socket write error Java Basics - Anfänger-Themen 2
M Pfad angabe bei getRescource und ImageIO.write Java Basics - Anfänger-Themen 4
hdi Datentypen FileOutputStream#write(int) mit ints? Java Basics - Anfänger-Themen 5
G ImageIO.write() Java Basics - Anfänger-Themen 2
I ImageIO.write(bild, "was gibts da alles", pfad); Java Basics - Anfänger-Themen 6
D FileWriter write? Zeilenumbruch ? Java Basics - Anfänger-Themen 4
S Technik hinter der write Methode Java Basics - Anfänger-Themen 5
C write Java Basics - Anfänger-Themen 3
S Inhalt aus Array auf JSP anzeigen mit bean:write Java Basics - Anfänger-Themen 2
F javax.imageio.ImageIO write methode Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben