Quellcode einelsen "line by line" (und abspeichern in file (txt)

blumenpeter

Aktives Mitglied
Hey Leute,

in meinem aktuellen Projekt will ich Facebook-Kommentare einlesen und dann in einer Datei abspeichern. Die entsprechenden URL's habe ich bereits erstellt und auch ein Facebook-Token habe ich mir generieren lassen.

Der Aufruf funktioniert ohne Probleme. Auch die "Weiterverarbeitung" der Daten, die ich abspeichern will, funktioniert ohne Probleme.

Nun zum Problem:
{
"data": [
{
"message": "L\u00fbck\u00fd",
"id": "1414421398881493"
},
{
"message": "Bauchspeck1988",
"id": "1414421415548158"
},
{
"message": "Dullitwin",
"id": "1414421428881490"
},
{
"message": "Yondaime PikaCHO",
"id": "1414422005548099"
},
{
"message": "HandOnHerdplatte",
"id": "1414422462214720"
},
{
"message": "QueQueWang",
"id": "1414423982214568"
},
{
"message": "Greedythan",
"id": "1414424052214561"
},
{
"message": "FrontallFLashpoi",
"id": "1414425098881123"
},
{
"message": "Choromo",
"id": "1414425102214456"
},

Das ist der Inhalt der Seite, den ich "line-by-line" abspeichern will (in eine Textdatei auf den Desktop). Das Problem ist, dass alles als 1 Line eingelesen wird, also alles nebeneinander steht:

{"data":[{"message":"L\u00fbck\u00fd","id":"1414421398881493"},{"message":"Bauchspeck1988","id":"1414421415548158"},{"message":"Dullitwin","id":"1414421428881490"},{

Hier der Code:
Java:
public String fbParse(String urlString) {
		try {
			url = new URL(urlString);
			is = url.openStream();
			br = new BufferedReader(new InputStreamReader(is));
			file = new File(System.getProperty( "user.home" ) + File.separator + "Desktop/FacebookComments.txt");
			
			System.out.println("Facebook-Comments-File is saved under your Desktop\\FacebookComments.txt");
			writer = new FileWriter(file ,false);
			writer.write(System.getProperty("line.separator"));
			
			while ((line = br.readLine()) != null) {
				System.out.println(line);
				writer.write(line);
				writer.flush();
			}
			writer.close();
		} catch (MalformedURLException mue) {
			mue.printStackTrace();
			return "FAIL";
		} catch (IOException ioe) {
			ioe.printStackTrace();
			return "FAIL";
		} finally {
			try {
				if (is != null)
					is.close();
			} catch (IOException ioe) {
				// nothing to see here
			}
		}

		return "OKAY";
	}


Also, ich schaffe es leider nicht, dass jede Zeile einzeln eingelesen und gespeichert wird. Vielleicht kann mir jemand dabei helfen 🙂


Eine weitere Frage hier:
Bei Facebook kommentiere die Leute auch mit Sonderzeichen (bsp: "Lûcký"). Das Programm kann damit umgehen, kein Problem, aber wenn ich mir die Kommetare abfrage, wird daraus "L\u00fbck\u00fd". Wie komme ich innherhalb des Programms von "L\u00fbck\u00fd" zurück zu "Lûcký"

Grüße
 
Zuletzt bearbeitet:
Die Daten werden schon weiterverarbeitet (nicht von Hand), aber ich brauche sie "untereinander", also damit ich sie "line-by-line" durchlaufen lassen kann.

Das Problem ist aber, dass der o.g. code alles als "eine Zeile" einliest, bzw. einfach als eine Zeile in die Text-Datei ausgibt. So kann weitergehend nicht damit arbeiten.

Also anstatt so:
{"data":[{"message":"L\u00fbck\u00fd","id":"1414421398881493"},{"message":"Bauchspeck1988","id":"1414421415548158"},{"message":"Dullitwin","id":"1414421428881490"},{

soll es wieder so ausgegeben(in der txt abgespeicehrt) werden:
{
"data": [
{
"message": "L\u00fbck\u00fd",
"id": "1414421398881493"
},
{
"message": "Bauchspeck1988",
"id": "1414421415548158"
},
{
"message": "Dullitwin",
"id": "1414421428881490"
},
{
"message": "Yondaime PikaCHO",
"id": "1414422005548099"
},

zusätzlich wollte ich die umgewandelten Namen "L\u00fbck\u00fd" umwandeln zu "Lûcký", nur weiß ich nicht wie ich das machen kann.

Grüße
 
Zuletzt bearbeitet:
Ich lese die Datei line-by-line ein und ziehe mir dann einfach nur die message raus, also das, was neben message steht. Also am Ende verarbeite ich nur noch (in dem Beispiel oben):

"Lûcký" --> mache damit ein paar Anfragen und speicher den Namen + Zusätzen aus der Datenbank in ein Array.

solange, bis ich keine Namen (line = br.readLine()) mehr finde. (die ganzen Sonderzeichen filter ich raus, also bleibt nur noch der Name und wird verarbeitet. Aber das funktioniert alles nur, wenn ich ""message": "L\u00fbck\u00fd"," als eigene Line einlesen kann.


Wenn ich den folgenden Part:
{
"data": [
{
"message": "L\u00fbck\u00fd",
"id": "1414421398881493"
},
{
"message": "Bauchspeck1988",
"id": "1414421415548158"
},
{
"message": "Dullitwin",
"id": "1414421428881490"
},
{
"message": "Yondaime PikaCHO",
"id": "1414422005548099"
},
{
"message": "HandOnHerdplatte",
"id": "1414422462214720"
},
{
"message": "QueQueWang",
"id": "1414423982214568"
},
{
"message": "Greedythan",
"id": "1414424052214561"
},
{
"message": "FrontallFLashpoi",
"id": "1414425098881123"
},
{
"message": "Choromo",
"id": "1414425102214456"
},
selbst in eine .txt (UTF-8) eingebe + abspeicher und dann diese Datei nehme, dann funktioniert das Programm. Aber ich habe keine Lust immer von Hand die Daten kurz kopieren und in die TXT zu schreiben, daher will ich das automatisiert machen.
 
Zuletzt bearbeitet:
@blumenpeter

Dann würde ich vorschlagen, du suchst dir einen JSON-Parser (z.B. GSON), wandelst den JSON-String damit in ein Array oder eine Liste von Ojekten um und suchst dir dort die messages raus.
 

Zurück
Oben