54 votes

Comment fonctionnent les chemins de fichiers relatifs dans Eclipse?

Donc, mon 2009 la résolution de nouvelles années est d'apprendre Java. J'ai récemment acquis un "Java pour les Nuls", et suivant le code de démonstration dans le livre, par le ré-écrire à l'aide d'Eclipse. De toute façon, chaque exemple dans le livre qui utilise un chemin relatif ne semble pas lire le .fichier txt il est censé lire.

Voici un exemple de code:

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()));
    }
}

Et vous pouvez le voir dans la capture d'écran ci-dessous, j'ai inclus ce fichier.

l'image n'est plus disponible

Aussi, j'ai vérifié que quand je créer l'application d'une copie de Hankees.txt est placé dans le dossier bin avec la compilation .les fichiers de classe.

Enfin, si je change la ligne 12 à la suivante et le lieu Hankees.txt dans la racine de mon disque C:\ le programme compile et s'exécute correctement.

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

Donc en gros, ma question est ce que je fais mal? Ou est Eclipse responsable pour cela, d'une certaine façon?

Merci pour toute aide!

77voto

jjnguy Points 62123

Vous avez besoin de "src/Hankees.txt"

Votre fichier se trouve dans le dossier source qui n’est pas compté comme répertoire de travail. \

Ou vous pouvez déplacer le fichier dans le répertoire racine de votre projet et utiliser simplement "Hankees.txt"

7voto

Bernie Perez Points 5091

C'est vraiment semblable à une autre question. Comment dois-je charger des fichiers dans mon application Java?

Comment dois-je charger mes fichiers dans mon Application Java?

Vous ne voulez charger vos fichiers par:

C:\your\project\file.txt

c'est mauvais!

Vous devez utiliser getResourceAsStream.

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

Et aussi, vous devez utiliser le Fichier.séparateurqui est dépendant du système nom-séparateur, représenté par une chaîne pour plus de commodité.

7voto

Stephen Denne Points 17031

Un projet de construction de chemin d'accès définit les ressources à partir de votre source de dossiers sont copiés à votre sortie des dossiers. Habituellement, cela est défini pour Inclure tous les fichiers.

De nouveaux types de configurations d'exécution par défaut à l'aide du répertoire de projet pour le répertoire de travail, mais cela peut aussi être changé.

Ce code montre la différence entre le répertoire de travail, et l'emplacement de l'endroit où la classe est chargé de:

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());
    }
}

La sortie est susceptible d'être quelque chose comme:

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

5voto

nasty pasty Points 692

Oui, Eclipse considère le répertoire principal comme le répertoire de travail / racine, aux fins des chemins.

... juste pensé que je voudrais ajouter quelques informations supplémentaires. Je suis nouveau ici! Je voudrais aider

2voto

Rob Points 31432

Paraphrasant à partir de http://java.sun.com/javase/6/docs/api/java/io/File.html :

Les classes sous java.io résolvent les noms de chemin relatifs par rapport au répertoire de l'utilisateur actuel, qui est généralement le répertoire dans lequel la machine virtuelle a été démarrée.

Eclipse définit le répertoire de travail sur le dossier de projet de niveau supérieur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X