Textdateien einlesen und diese anzeigen

julia123

Erfahrenes Mitglied
hi ich bin es wieder :( , aufgabe:
"Textdateien einlesen und diese anzeigen"

also text datei so aus der konsolo heraus ein lesen zu lassen in dem man den Phat an gibt bekomm ich hin, jedoch will ich das dem Benutzer ein Fenster erscheint in dem er genau auf die txt tippt und diese wird eingelesen und angezeigt in einem entsprechenen fenster.


Code:
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

public class Test {

	private static Path locateFileWithType(String msg, String... contentTypes)
			throws IOException {
		JFileChooser fc = new JFileChooser();
		File f = null;
		Path p = null;
		while (true) {
			int returnVal = fc.showDialog(null, msg);
			if (returnVal == JFileChooser.APPROVE_OPTION) {
				f = fc.getSelectedFile();
				System.out.println("f = " + f.getAbsolutePath());
				p = f.toPath();
				if (Files.isRegularFile(p) && Files.isReadable(p)) {
					System.out.println("Datei hat den Typ "
							+ Files.probeContentType(p));
					for (String type : contentTypes) {
						if (Files.probeContentType(p).equals(type)) {
							return p;
						}
					}
				} else {
					System.out
							.println("Datei ist keine reguläre Datei oder nicht lesbar.");
				}
				JOptionPane.showMessageDialog(null,
						"Die Datei hat nicht den richtigen Typ");
			} else
				break;
		}
		return null;
	}

	public static void main(String[] args) throws IOException {
	      Path path = locateFileWithType("CSV Datei", "text/csv",
	            "text/comma-separated-values", "application/vnd.ms-excel"); // Hier habe ich "application/vnd.ms-excel" hinzugefügt.
	      JOptionPane.showMessageDialog(null, "Sie haben gewaehlt:" + path);
	   }
}



ich versuche grade diesen teil hier zu verstehen damit ich sollch ein fenster erstellen kann.:

Code:
private static Path locateFileWithType(String msg, String... contentTypes)
			throws IOException {
		JFileChooser fc = new JFileChooser();
		File f = null;
		Path p = null;
		while (true) {
			int returnVal = fc.showDialog(null, msg);
			if (returnVal == JFileChooser.APPROVE_OPTION) {
				f = fc.getSelectedFile();
				System.out.println("f = " + f.getAbsolutePath());
				p = f.toPath();
				if (Files.isRegularFile(p) && Files.isReadable(p)) {
					System.out.println("Datei hat den Typ "
							+ Files.probeContentType(p));
					for (String type : contentTypes) {
						if (Files.probeContentType(p).equals(type)) {
							return p;
						}
					}
				} else {
					System.out
							.println("Datei ist keine reguläre Datei oder nicht lesbar.");
				}
				JOptionPane.showMessageDialog(null,
						"Die Datei hat nicht den richtigen Typ");
			} else
				break;
		}
		return null;
	}

so sieht das projekt grade aus:
Code:
public class Main {

	// Textdateien einlesen und diese anzeigen

	public static void main(String[] args) throws IOException {

		Path path = Paths.get("test.txt");// anstatt test.text will ich das der
											// benutzer seine txt datei suchen
											// kann
		String content = new String(Files.readAllBytes(path),
				Charset.defaultCharset());
		System.out.println(content);
	}

}
 

julia123

Erfahrenes Mitglied
also erst mal vielen dank das hat mir sehr weiter geholfen!

Code:
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

import javax.swing.JFileChooser;

public class Main {

	// Textdateien einlesen und diese anzeigen

	public static void main(String[] args) throws IOException {

		// JFileChooser-Objekt erstellen
		JFileChooser chooser = new JFileChooser();
		// Dialog zum Oeffnen von Dateien anzeigen
		int rueckgabeWert = chooser.showOpenDialog(null);

		/* Abfrage, ob auf "Öffnen" geklickt wurde */
		if (rueckgabeWert == JFileChooser.APPROVE_OPTION) {
			// Ausgabe der ausgewaehlten Datei
			System.out.println("Die zu öffnende Datei ist: "
					+ chooser.getSelectedFile().getName());
		}

		Path path = Paths.get(chooser.getSelectedFile().getName());
		String content = new String(Files.readAllBytes(path),
				Charset.defaultCharset());
		System.out.println(content);
	}

}


jetzt müsste er doch die txt datei lesen oder seh ich das falsch ? wieso kommt bei mir so eine meldung :
at java.nio.file.Files.readAttributes(Unknown Source)
at java.nio.file.Files.size(Unknown Source)
at java.nio.file.Files.readAllBytes(Unknown Source)
at hausaufgabe10.Main.main(Main.java:32)
 

ComFreek

Mod | @comfreek
Moderator
Du hast die Fehlermeldung leider nur partiell kopiert.
Das was du kopiert hast, ist der Backtrace, aber die eigentliche Fehlermeldung steht nicht drin.
 

ComFreek

Mod | @comfreek
Moderator
Du hast die Fehlermeldung nicht komplett kopiert.
Entweder du führst das Programm nochmal aus, kopierst diesmal alles oder du machst (einfacher) einen Screenshot.

Im Backtrace kann man grob gesagt die zuvor aufgeruften Funktionen sehen.
 

julia123

Erfahrenes Mitglied
du hast natürlich recht ! tut mir leid. so noch mal :
Die zu öffnende Datei ist: wdasda.txt
Exception in thread "main" java.nio.file.NoSuchFileException: wdasda.txt
at sun.nio.fs.WindowsException.translateToIOException(Unknown Source)
at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
at sun.nio.fs.WindowsFileAttributeViews$Basic.readAttributes(Unknown Source)
at sun.nio.fs.WindowsFileAttributeViews$Basic.readAttributes(Unknown Source)
at sun.nio.fs.WindowsFileSystemProvider.readAttributes(Unknown Source)
at java.nio.file.Files.readAttributes(Unknown Source)
at java.nio.file.Files.size(Unknown Source)
at java.nio.file.Files.readAllBytes(Unknown Source)
at hausaufgabe10.Main.main(Main.java:30)
 

ComFreek

Mod | @comfreek
Moderator
Probier folgenden Code:
Java:
Path path = chooser.getSelectedFile().toPath();

String content = new String(Files.readAllBytes(path),
                Charset.defaultCharset());
System.out.println(content);
Das solltest du übrigens in deinen IF-Block schreiben. Denn falls der Benutzer keine Datei ausgewählt hat, bekommst du wahrscheinlich wieder eine Exception.

Problem war übrigens, dass du die Datei "wdasda.txt" öffnen wolltest, sie aber nicht existiert. Du musst den absoluten, vollständigen Pfad nehmen, nicht nur den Dateinamen.


PS: Nächstes mal die Fehlermeldungen in Code-Tags o.Ä. packen, der Übersichtlichkeit halber ;)
 

julia123

Erfahrenes Mitglied
angenommen ich will jetzt beide teile also einmal

Code:
	// JFileChooser-Objekt erstellen
		JFileChooser chooser = new JFileChooser();
		// Dialog zum Oeffnen von Dateien anzeigen
		int rueckgabeWert = chooser.showOpenDialog(null);

		/* Abfrage, ob auf "Öffnen" geklickt wurde */
		if (rueckgabeWert == JFileChooser.APPROVE_OPTION) {
			// Ausgabe der ausgewaehlten Datei
			System.out.println("Die zu öffnende Datei ist: "
					+ chooser.getSelectedFile().getName());
		}

und
Code:
Path path = chooser.getSelectedFile().toPath();
		 
		String content = new String(Files.readAllBytes(path),
		                Charset.defaultCharset());
		System.out.println(content);
getrennt hand haben, was soll ich wie machen.Also um z.b. auf diesen JFileChooser-Objekt mit anderen methoden darauf zugreifen.
zusammengefasst: ich bin mir nicht mehr ganz sicher wann eine methode und wann eine funktion.
ich würde jetzt JFileChooser-Objekt als funktion programieren weil das gibt mir ja den namen an und das "lesen" als methode ?richtig?
 

ComFreek

Mod | @comfreek
Moderator
zusammengefasst: ich bin mir nicht mehr ganz sicher wann eine methode und wann eine funktion.
ich würde jetzt JFileChooser-Objekt als funktion programieren weil das gibt mir ja den namen an und das "lesen" als methode ?richtig?

Was ist für dich eine Funktion? Funktion = Methode im Java-Sprachgebrauch der meisten Menschen.

Was willst du denn überhaupt machen?