Frage

So meine 2009 neue Jahre Auflösung von Java zu lernen. Ich erwerben „Java for Dummies“ vor kurzem und zusammen mit dem Demo-Code im Buch folgendes wurde durch Umschreiben es mit Eclipse. Wie auch immer, jedes Beispiel in dem Buch, das einen relativen Pfad verwendet scheint nicht die TXT-Datei zu lesen, es angenommen hat, aus zu lesen.

Hier ist der Beispielcode:

import java.util.Scanner;
import java.io.File;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.GridLayout;

class TeamFrame extends JFrame {

    public TeamFrame() throws IOException {
        PlayerPlus player;
        Scanner myScanner = new Scanner(new File("Hankees.txt"));

        for (int num = 1; num <= 9; num++) {
            player = new PlayerPlus(myScanner.nextLine(), myScanner.nextDouble());
            myScanner.nextLine();
            addPlayerInfo(player);
        }      

        add(new JLabel());
        add(new JLabel("   ------"));
        add(new JLabel("Team Batting Aberage:"));
        add(new JLabel(PlayerPlus.findTeamAverageString()));
        setTitle("The Hankees");
        setLayout(new GridLayout(11,2));
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }

    void addPlayerInfo(PlayerPlus player) {
        add(new JLabel(player.getName()));
        add(new JLabel(player.getAverageString()));
    }
}

Und Sie können im folgenden Screenshot sehe ich diese Datei aufgenommen haben.

Bild nicht mehr verfügbar

Auch habe ich festgestellt, dass, wenn ich beim Aufbau die Anwendung, die eine Kopie von Hankees.txt im Ordner ist mit den kompilierten .class-Dateien platziert wird.

Schließlich, wenn ich die Leitung 12 auf die Änderung folgenden und Hankees.txt in der Wurzel meiner C:. \ Laufwerk das Programm kompiliert und läuft fein

Scanner myScanner = new Scanner(new File("C:\\Hankees.txt"));

Also im Grunde ist meine Frage, was mache ich falsch? Oder ist dies in irgendeiner Weise verantwortlich Eclipse-?

Vielen Dank für jede und alle Hilfe!

War es hilfreich?

Lösung

Sie müssen "src/Hankees.txt"

Die Datei ist im Quellordner, die nicht als Arbeitsverzeichnis gezählt wird. \

Sie können auch die Datei bis zu dem Stammverzeichnis des Projektes bewegen und nur "Hankees.txt" verwenden

Andere Tipps

Ein Build-Pfad des Projektes definiert, welche Ressourcen von Ihrem Quellordner auf Ihre Ausgabeordner kopiert werden. Normalerweise ist dies auf alle Dateien einschließen.

New Laufkonfigurationen Standard des Projektverzeichnis für das Arbeitsverzeichnis zu verwenden, obwohl dies auch geändert werden kann.

Dieser Code zeigt den Unterschied zwischen dem Arbeitsverzeichnis, und der Position, wo die Klasse geladen wurde:

public class TellMeMyWorkingDirectory {
    public static void main(String[] args) {
        System.out.println(new java.io.File("").getAbsolutePath());
        System.out.println(TellMeMyWorkingDirectory.class.getClassLoader().getResource("").getPath());
    }
}

Die Ausgabe ist wahrscheinlich so etwas wie sein:

C:\your\project\directory
/C:/your/project/directory/bin/

Das ist wirklich vergleichbar mit einer anderen Frage. Wie soll ich Dateien in meine Java-Anwendung geladen werden?

Wie soll ich meine Dateien in meine Java-Anwendung geladen werden?

Sie nicht möchten Sie Ihre Dateien in laden von:

C:\your\project\file.txt

Das ist schlecht!

Sie sollten getResourceAsStream verwenden.

InputStream inputStream = YourClass.class.getResourceAsStream(“file.txt”);

Und Sie sollten auch mit File.separator ; Welches ist die systemabhängigen name-Trennzeichen, als String der Bequemlichkeit halber dargestellt.

Ja, Eclipse sieht das Top-Verzeichnis als Arbeits / root-Verzeichnis für die Zwecke der Wege.

... nur dachte ich einige zusätzliche Informationen hinzufügen würden. Ich bin neu hier! Ich würde gerne helfen.

In Anlehnung an http: //java.sun .com / JavaSE / 6 / docs / api / java / io / file.html :

Die Klassen unter java.io lösen relative Pfadnamen gegen das aktuelle Benutzer-Verzeichnis, das in der normalerweise das Verzeichnis ist die virtuelle Maschine gestartet wurde.

Eclipse-setzt das Arbeitsverzeichnis auf die oberste Ebene Projektordner.

Sie können jederzeit erhalten Sie Ihren Laufzeitpfad durch die Verwendung:

 String path = new File(".").getCanonicalPath();

Dies liefert wertvolle Informationen darüber, wo Dateien und Ressourcen zu setzen.

i hat das gleiche Problem. Wenn Yourclass und Hankees.txt ein Verzeichnis in Ihrem Projekt haben, dann finde ich folgende -. Nicht so schlimm

import java.net.URL;
//<...>
URL url = YourClass.class.getClassLoader().getResource("Hankees.txt");
String filesPathAndName = url.getPath();        
Scanner myScanner = new Scanner(new File(filesPathAndName))
//<...>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top