Problem Reader

Status
Nicht offen für weitere Antworten.

andreas2505

Bekanntes Mitglied
hallo,

ich möchte eine methode, die alle möglichen datentypen einliest. Allerdings gibt es da ein Problem. Ich habe diese Methode bis jetzt nur für Textdateien geschrieben. Und nun möchte ich, wie gesagt, dass alle datentypen eingelesen werden können.
Als return wert soll es aber ein String bleiben. Wie muss ich das abändern?

Java:
 public String readFile(String fileName){
        String F = fileName;
        String P = "";
        try{
            Scanner sc = new Scanner(new File(F));
            P = sc.next();
            while (sc.hasNextLine()) {
                sc.nextLine();
                P= P+sc.next();
                
            }
            sc.close();
        }
        catch (FileNotFoundException e) {
                System.out.println("File not found: "+fileName);}
                return P;
}

nun mein zweites Problem. Bei einem Leerzeichen bricht der Stream ab und liest nicht mehr weiter. Wie kann ich das Problem beheben. ich will dass es die Leerzeichen nicht mit einliest sondern weiter liest.
 
ich möchte eine methode, die alle möglichen datentypen einliest. Allerdings gibt es da ein Problem. Ich habe diese Methode bis jetzt nur für Textdateien geschrieben. Und nun möchte ich, wie gesagt, dass alle datentypen eingelesen werden können.
Als return wert soll es aber ein String bleiben. Wie muss ich das abändern?

Alle Datentypen?

In Textdateien stehen doch nur Strings drinnen. ???:L

Ansonsten binär einlesen und in Strings umwandeln

ich will dass es die Leerzeichen nicht mit einliest.

Die eingelesenen Strings durchlaufen und nur jedes Nicht-Leerzeichen in einen neuen String kopieren.
 
also zum ersten Punkt: habe ich anders gemeint:

Ich will das alle Dateitypen eingelesen werden können, also .txt, .pdf, .xml, .xls, .....

zum zweiten Punkt: kannste mir mal mit kurzen Quellcode zeigen wie ich das machen muss, weil ich nicht weiß wie man aus einem String ein Leerzeichen erkennt und das ausliest
 
Es macht null Sinn Binärdaten, z.B. aus Bildern, in einen String einzulesen. Wozu willst du sowas machen?
 
ok anders formuliert.
Ich brauche eine Methode, die alle möglichen Dateitypen ausliest. am besten in einen String packt, aber auch andere Datentypen sind möglich.
Kann auch als irgendein Object von einem Datentyp ausgelesen werden.
Wichtig ist nur, dass jeder Dateityp ausgelesen wird. Kannste mit da vlt. mit etwas Quellcode helfen
 
Ich will das alle Dateitypen eingelesen werden können, also .txt, .pdf, .xml, .xls, .....
Was haben denn Dateitypen mit Datentypen zu tun?

Die Endung spielt keine Rolle. Einfach nur binär einlesen und nach eigenem Gutdünken
in String umwandeln.

zum zweiten Punkt: kannste mir mal mit kurzen Quellcode zeigen wie ich das machen muss, weil ich nicht weiß wie man aus einem String ein Leerzeichen erkennt und das ausliest

Java:
...
String s = ...; // Eine Zeile aus Datei einlesen
String sNeu = "";
for (int i=0; i < s.length; ++i)
    if (s.charAt(i) != ' ')
        sNeu += s.charAt(i);
s = sNeu;
...
 
Zuletzt bearbeitet:
ok, andere Frage, kann ich den Scanner auch nehemn um andere dateitypen einzulesen?

und wie kriege ich das hin, dass erstmal die komplette datei eingelesen wird. Ich habe das ja so:

Java:
 public String readFile(String fileName){
        String F = fileName;
        String P = "";
        try{
            Scanner sc = new Scanner(new File(F));
            P = sc.next();
            while (sc.hasNextLine()) {
                sc.nextLine();
                P= P+sc.next();
                
            }
            sc.close();
        }
        catch (FileNotFoundException e) {
                System.out.println("File not found: "+fileName);}
                return P;
}

aber da kommt ein fehler z.B. bei einem JPEG. Ich will halt dass es die datei normal einliest und als String abspeichert.

Kann mir vlt. wer mit ein bisschen Code helfen
 
Ich brauche eine Methode, die alle möglichen Dateitypen ausliest. am besten in einen String packt, aber auch andere Datentypen sind möglich.
alle möglichen Dateitypen als irgendwelche Datentypen zurück geben... viel Spaß..

zb eine Excel Datei als Integer einlesen, und eine Exe als ArrayList oder wie?


Java:
 P= P+sc.next();
ganz böse... nimm lieber StringBuilder oder StringBuffer. Warum? Das kann jemand anders erklären.. grad keine Lust ;-)


aber da kommt ein fehler z.B. bei einem JPEG.
welcher?
 
Java:
Exception in thread "AWT-EventQueue-0" java.util.NoSuchElementException
	at java.util.Scanner.throwFor(Scanner.java:838)
	at java.util.Scanner.next(Scanner.java:1347)
	at HVES.readFile(HVES.java:975)
 
Java:
 P= P+sc.next();
ganz böse... nimm lieber StringBuilder oder StringBuffer. Warum? Das kann jemand anders erklären.. grad keine Lust ;-)
weils ab java 1.5 (oder so) egal ist und der compiler so und so StringBxxx (welchen auch immer) dir reinhaut ;-)

Blick in die API hilft:
A simple text scanner which can parse primitive types and strings using regular expressions.
A Scanner breaks its input into tokens using a delimiter pattern, which by default matches whitespace.
d.h. du kannst nicht text basierte Format nciht mit Scanner einlesen...

btw - warum wird Scanner nicht verlinkt im Code Tag
Java:
Scanner s;
String st;

mal abgesehen von dem Unsinn ALLES als String einlesen zu wollen.

ich denke du musst von den highlevel klassen wie Scanner weg und schoen wieder byte fuer byte einlesen und dann als String umwandeln.
 
Zuletzt bearbeitet von einem Moderator:
Fragen wir doch mal anders: Was hast du denn mit den eingelesenen Daten vor? U.U. ist es vielleicht sogar geschickt direkt einen InputStream zurück zu liefern.
 
Na sicher doch!

warum schreibt der eine, dass es geht und der andere dass es nicht geht?
ist meine methode dafür richtig oder was muss ich ändern?



Was verstehst du unter "normal einlesen und als String speichern"? ???:L

damit meine ich, dass die datei nur eingelesen werden soll und als string zurückgegeben. wäre super, wenn mir jemand mal code schreibt wie ich das am besten einlese
 
fehler siehe oben!!!

die datei soll als String zurückgeliefert werden oder als Object. Danach will ich die datei verschlüsseln und so weiter, also damit arbeiten.
 
Dann ist es wohl am besten du arbeitest direkt mit dem InputStream. Sonst wird es z.B. auch lustig wenn die Datei >100mb hat 😉

Zum Ent-/Verschlüsseln nimmt man dann z.B. einen CipherInput(Output)Stream
 
weils ab java 1.5 (oder so) egal ist und der compiler so und so StringBxxx (welchen auch immer) dir reinhaut
sicher?

Java:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;


public class DateiLesen {
	
	public static void main(String[] args) throws IOException {
		BufferedReader reader = new BufferedReader(new FileReader("c:/image.jpg"));
        String line = null;
        StringBuilder buf = new StringBuilder();
        while((line =reader.readLine()) != null){
        	buf.append(line); 
        	buf.append(System.getProperty("line.separator"));
        }
        System.out.println(buf.toString());
	}

}
 
BufferedReader reader = new BufferedReader(new FileReader("c:/image.jpg"));

und wie schreib ich das, wenn ich nicht weiß, was für ein dateityp es ist?
 
sicher?

Java:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;


public class DateiLesen {
	
	public static void main(String[] args) throws IOException {
		BufferedReader reader = new BufferedReader(new FileReader("c:/image.jpg"));
        String line = null;
        StringBuilder buf = new StringBuilder();
        while((line =reader.readLine()) != null){
        	buf.append(line); 
        	buf.append(System.getProperty("line.separator"));
        }
        System.out.println(buf.toString());
	}

}

versteh nicht so recht dein bsp... meine Aussage ist dass der compiler mittlerweile aus dem beliebten [c]"s1" + "s2"[/c] einen StringBuillder mit append baut.

siehe java String concatenation - Stack Overflow
 
@bygones: in "sicher ?" bezieht sich nicht auf meinen code ;-) das frag ich einfach so... mein code ist für den threadsteller....

und wie schreib ich das, wenn ich nicht weiß, was für ein dateityp es ist?
aber einen dateinamen hast du oder?
 
warum schreibt der eine, dass es geht und der andere dass es nicht geht?

Du kannst mit einem Scanner jeden möglichen Dateityp einlesen.

ist meine methode dafür richtig oder was muss ich ändern?

Die Methode ist für jeden Dateityp korrekt wenn sie auch
für Text-Dateien funktioniert

damit meine ich, dass die datei nur eingelesen werden soll und als string zurückgegeben. wäre super, wenn mir jemand mal code schreibt wie ich das am besten einlese

Java:
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader();
String s = "";
do {
  s = br.readLine();
  if (s != null)
    sb.append(s);
} while (s != null);
s = sb.toString();
 
ok hab jetzt mal mit euren tipss/code folgendes geschrieben:

Java:
public String DateiLesen(String filename) {
        
        StringBuilder buf = new StringBuilder();
        try {
            BufferedReader reader = new BufferedReader(new FileReader(filename));
            String line = null;
            while((line =reader.readLine()) != null){
                buf.append(line); 
                buf.append(System.getProperty("line.separator"));
            }
        }
        catch (FileNotFoundException e) {
                System.out.println("File not found: "+filename);}
                
        String s = buf.toString();
        return s;
    }

irgendiwe muss ich da noch ne exception reinpacken, wei0 aber nicht genau wo:

unreported exception java.io.IOException must be declared oder be thrown bei der zeile mit while
 
Du kannst mit einem Scanner jeden möglichen Dateityp einlesen.
tatsache...
Java:
    public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(new File("filter.gif"));
        while(scanner.hasNext()) {
            System.out.println(scanner.next());
        }
    }
interessant 😉
 
Java:
    public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(new File("filter.gif"));
        while(scanner.hasNext()) {
            System.out.println(scanner.next());
        }
    }
interessant 😉

Kommt denn da ein Fehler? ???:L

Ich denke nicht!

Daß es keinen Sinn macht z.B. Gifs durch einen Scanner zu lesen weiß ich auch.

Aber es wurde ja gefragt wie man jeden Dateityp als Strings einlesen kann.
 
irgendiwe muss ich da noch ne exception reinpacken, wei0 aber nicht genau wo:

unreported exception java.io.IOException must be declared oder be thrown bei der zeile mit while

reader.readLine() wirft eine exception... fangen oder werfen....


hier das fangen...
Java:
  try {
				while((line =reader.readLine()) != null){
				    buf.append(line); 
				    buf.append(System.getProperty("line.separator"));
				}
			} catch (IOException e) {
				  System.out.println("Fehler beim Lesen "+e.getLocalizedMessage());
			}
 
ok, nun gleich noch eine andere Frage:

ich habe hier eine writeFile Methode, mit der ich eine datei schreiben will.

Alerdings soll nicht wie hier eine Text-Datei geschrieben werden, sondern eine datei mit dem dateityp von der eingelesenen datei. was muss ich da ändern, oder wie kann ich das schreiben?

Java:
public void writeFiles(String text, String directory) {
        String fileName = directory+".txt";
        String t = text;
        try {
            BufferedWriter out = new BufferedWriter(new FileWriter(fileName));
            out.write(t);
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
sondern eine datei mit dem dateityp von der eingelesenen datei. was muss ich da ändern, oder wie kann ich das schreiben?

Einfach den Dateinamen mit der entsprechenden Endung versehen.

Aber wenn du die Dateien als String einliest, werden unter Umständen
nicht verwertbare Kopien erstellt.

Also um Dateien beliebigen Typs zu kopieren,
würde ich sie lieber (wie schon gesagt) binär einlesen.
 
und in was muss ich das ändern

wozu machst du das überhaupt? Schule? Studium? Es ist doch Sommer....
wenn das dein privates Vergnügen ist, warum probierst dus nicht selber?

schon mal die Methoden der Klasse String angesehen? Java Platform SE 6

substring, lastIndexOf, lenght... eh leicht zu verstehen....


Java:
public class LesenSchreiben {
	
	public static void main(String[] args) {
		
		String dateiName = "in.jpg";
		
		String endung = dateiName.substring(dateiName.lastIndexOf('.'),dateiName.length());
		System.out.println(endung);
		
		LesenSchreiben ls = new LesenSchreiben();
		String inhalt = ls.dateiLesen(dateiName);
		ls.dateiSchreiben(inhalt, "out"+endung);
		
	}
	
	public String dateiLesen(String filename)  {
	      ...  	      
	}
	
	public void dateiSchreiben(String inhalt, String filename){
		...
	}

}


das ließst du dir jetzt durch und dann meldest dich wieder, ok ;-)

Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 14 Dateien und Datenströme
 
ok, PROBLEM

ich habe jetzt die einlese-Methode von euch:

Java:
public String readFile(String filename) {
        
        StringBuilder buf = new StringBuilder();
        try {
            BufferedReader reader = new BufferedReader(new FileReader(filename));
            String line = null;
            while((line =reader.readLine()) != null){
                buf.append(line); 
                buf.append(System.getProperty("line.separator"));
            }
        }
        catch (FileNotFoundException e) {
                System.out.println("File not found: "+filename);}
         catch (IOException e2) {}
                
        String s = buf.toString();
        return s;
    }

das habe ich nun für ein JPEG und einen text probiert.

Bei dem Text funktioniert es auch problemlos, aber beim JPEG nicht.

Da stimmt die zweite Zeile schon nicht mehr mit der eigentlichen zweiten Zeile überein( wenn ich das Bild mit einem Editor öffne).

Wo liegt da der Fehler
 
wie muss ich das dann umschreiben?

geht mit dem byte-weise einlesen alles einzulesen oder gibts da wieder einschränkungen?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben