2009-09-26 11 views
50

Je veux un programme Java qui lit un nom de fichier spécifié par l'utilisateur à partir du répertoire en cours (le même répertoire où le fichier .class est exécuté).Java, lecture d'un fichier du répertoire courant?

En d'autres termes, si l'utilisateur spécifie le nom de fichier à « monFichier.txt », et ce fichier est déjà dans le répertoire courant:

reader = new BufferedReader(new FileReader("myFile.txt")); 

ne fonctionne pas. Pourquoi?

Je l'utilise sous Windows.

+1

C'est le même sous Linux aussi –

Répondre

37

Le répertoire en cours n'est pas (nécessairement) le répertoire dans lequel se trouve le fichier .class. C'est le répertoire de travail du processus. (ie: le répertoire où vous étiez lorsque vous avez démarré la JVM)

Vous pouvez charger des fichiers du même répertoire que le fichier .class avec getResourceAsStream(). Cela vous donnera un InputStream que vous pouvez convertir en un lecteur avec InputStreamReader.

+12

+1. Si vous utilisez un EDI comme Eclipse ou Idea, le répertoire courant sera le répertoire du projet, pas la sortie du compilateur. –

+1

@piiligrim, dépend de votre configuration de lancement –

+0

@DenisTulskiy Je travaille sur Eclipse avec le même codage que l'exemple de la personne. Le mien ne fonctionne toujours pas, pourquoi est-ce? – windsound

58

Essayez

System.getProperty("user.dir") 

Il retourne le répertoire de travail courant.

+3

mais il retourne uniquement le chemin jusqu'au répertoire racine du projet. comment nous pouvons obtenir le chemin du paquet courant dans la méthode principale de java –

+0

Ceci est super utile. Merci :) – whitehat

4

Si vous savez que votre fichier va vivre là où sont vos classes, ce répertoire sera sur votre chemin de classe. Dans ce cas, vous pouvez être sûr que cette solution va résoudre votre problème:

URL path = ClassLoader.getSystemResource("myFile.txt"); 
if(path==null) { 
    //The file was not found, insert error handling here 
} 
File f = new File(path.toURI()); 

reader = new BufferedReader(new FileReader(f)); 
21

Aucune des réponses ci-dessus ne me convient. Voici ce qui fonctionne pour moi.

Disons que votre nom de classe est Foo.java, pour accéder à la monFichier.txt dans le même dossier que Foo.java, utilisez ce code:

URL path = Foo.class.getResource("myFile.txt"); 
File f = new File(path.getFile()); 
reader = new BufferedReader(new FileReader(f)); 
-3

Cela fonctionne aussi:

Path file=Paths.get("Your file path"); 
InputStream is=Files.newInputStream(file); 
BufferedReader br=new BufferedReader(new InputStreamReader(is)); 
4

Les fichiers de votre projet sont disponibles par rapport à votre dossier src. si vous savez quel paquet ou un dossier myfile.txt sera, disons qu'il est dans

----src 
--------package1 
------------myfile.txt 
------------Prog.java 

vous pouvez spécifier son chemin comme « src/package1/myfile.txt » de Prog.java

Questions connexes