it-swarm.com.de

Wie funktionieren relative Dateipfade in Eclipse?

Meine 2009 Neujahrsauflösung ist es also, Java zu lernen. Ich habe kürzlich "Java for Dummies" erworben und bin dem Demo-Code im Buch gefolgt, indem ich ihn mit Eclipse neu geschrieben habe. Wie auch immer, jedes Beispiel in dem Buch, das einen relativen Pfad verwendet, scheint nicht die TXT-Datei zu lesen, aus der es gelesen werden soll.

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 sehen, dass ich diese Datei aufgenommen habe.

Bild nicht mehr verfügbar

Außerdem habe ich überprüft, dass beim Erstellen der Anwendung eine Kopie von Hankees.txt mit den kompilierten .class-Dateien im bin-Ordner abgelegt wird.

Wenn ich Zeile 12 zu folgendem ändere und Hankees.txt in das Stammverzeichnis meines Laufwerks C:\lege, wird das Programm kompiliert und funktioniert einwandfrei.

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

Im Grunde ist meine Frage, was mache ich falsch? Oder ist Eclipse in irgendeiner Weise dafür verantwortlich?

Vielen Dank für jede Hilfe!

53
PHLAK

Du brauchst "src/Hankees.txt"

Ihre Datei befindet sich im Quellordner, der nicht als Arbeitsverzeichnis gezählt wird. \

Oder Sie verschieben die Datei in das Stammverzeichnis Ihres Projekts und verwenden einfach "Hankees.txt"

75
jjnguy

Das ähnelt wirklich einer anderen Frage. Wie soll ich Dateien in meine Java Anwendung laden?

Wie soll ich meine Dateien in meine Java Application laden?

Sie möchten nicht Ihre Dateien laden durch:

C:\your\project\file.txt

das ist schlecht !

Sie sollten getResourceAsStream verwenden.

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

Und du solltest File.separator; Hierbei handelt es sich um das systemabhängige Name-Trennzeichen, das der Einfachheit halber als Zeichenfolge dargestellt wird.

7
Bernie Perez

Der Erstellungspfad eines Projekts definiert, welche Ressourcen aus Ihren Quellordnern in Ihre Ausgabeordner kopiert werden. Normalerweise ist dies auf Alle Dateien einschließen eingestellt.

Neue Ausführungskonfigurationen verwenden standardmäßig das Projektverzeichnis für das Arbeitsverzeichnis. Dies kann jedoch auch geändert werden.

Dieser Code zeigt den Unterschied zwischen dem Arbeitsverzeichnis und dem Speicherort, von dem 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 dürfte ungefähr so ​​aussehen:

C:\your\project\directory
/C:/your/project/directory/bin/
7
Stephen Denne

Ja, Eclipse sieht das oberste Verzeichnis als Arbeits-/Stammverzeichnis für die Zwecke der Pfade.

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

5
nasty pasty

Sie können Ihren Laufzeitpfad jederzeit ermitteln, indem Sie Folgendes verwenden:

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

Dies liefert wertvolle Informationen darüber, wo Dateien und Ressourcen abgelegt werden sollen.

2
Sudip Bhandari

Umschreibung von http://Java.Sun.com/javase/6/docs/api/Java/io/File.html :

Die Klassen unter Java.io relative Pfadnamen anhand des aktuellen Benutzerverzeichnisses auflösen. Dies ist normalerweise das Verzeichnis, in dem die virtuelle Maschine gestartet wurde.

Eclipse legt das Arbeitsverzeichnis auf den Projektordner der obersten Ebene fest.

2
Rob

ich habe das gleiche Problem. Wenn YourClass und Hankees.txt ein Verzeichnis in Ihrem Projekt haben, dann finde ich Folgendes - 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))
//<...>
1
steelsdv