J'ai un projet avec 2 packages:
tkorg.idrs.core.searchengines
tkorg.idrs.core.searchengines
Dans package (2), j'ai un fichier texte ListStopWords.txt
, dans package (1), j'ai une classe FileLoadder
. Voici le code dans FileLoader
:
File file = new File("properties\\files\\ListStopWords.txt");
Mais avoir cette erreur:
The system cannot find the path specified
Pouvez-vous donner une solution pour y remédier? Merci.
Si c'est déjà dans le classpath, il suffit de l'obtenir à partir du classpath. Ne modifiez pas les chemins relatifs dans Java.io.File
. Ils dépendent du répertoire de travail actuel sur lequel vous n’avez aucun contrôle depuis le code Java.
En supposant que ListStopWords.txt
se trouve dans le même package que FileLoader
class:
URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.getPath());
Ou si tout ce que vous recherchez est une InputStream
:
InputStream input = getClass().getResourceAsStream("ListStopWords.txt");
Si le fichier est - comme le nom du paquet l'indique - est réellement un fichier propriétés digne de ce nom (contenant __ lignes key=value
) avec simplement la "mauvaise" extension, vous pouvez alors l'alimenter immédiatement avec le load()
méthode.
Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("ListStopWords.txt"));
Remarque: lorsque vous essayez d'y accéder depuis le contexte static
, utilisez FileLoader.class
au lieu de getClass()
dans les exemples ci-dessus.
La ligne suivante peut être utilisée si nous voulons spécifier le chemin relatif du fichier.
File file = new File("./properties/files/ListStopWords.txt");
Le chemin relatif fonctionne en Java en utilisant le fichier. opérateur.
La question est donc de savoir comment connaître le chemin d'accès actuel de Java.
faire une petite expérience
File directory = new File("./");
System.out.println(directory.getAbsolutePath());
Observez le résultat, vous apprendrez à connaître le répertoire actuel dans lequel Java cherche. A partir de là, utilisez simplement l’opérateur ./ pour localiser votre fichier.
par exemple si la sortie est
G:\Java8Ws\MyProject\content.
et votre fichier est présent dans le dossier MyProject simplement utiliser
File resourceFile = new File("../myFile.txt");
J'espère que cela t'aides
InputStream in = FileLoader.class.getResourceAsStream("<relative path from this class to the file to be read>");
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
}
essayez .\properties\files\ListStopWords.txt
Bien que la réponse fournie par BalusC fonctionne dans ce cas, elle est interrompue lorsque le chemin du fichier contient des espaces car, dans une URL, ceux-ci sont convertis en% 20, ce qui n’est pas un nom de fichier correct. Si vous construisez l'objet File à l'aide d'un URI plutôt que d'une chaîne, les espaces seront gérés correctement:
URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.toURI());
J'aurais pu commenter, mais j'ai moins de représentants pour ça ... La réponse de Samrat a fait le travail pour moi. Il est préférable de voir le chemin du répertoire en cours à travers le code suivant.
File directory = new File("./");
System.out.println(directory.getAbsolutePath());
Je l'ai simplement utilisée pour corriger un problème auquel j'étais confronté dans mon projet. Veillez à utiliser ./ pour revenir au répertoire parent du répertoire actuel.
./test/conf/appProperties/keystore
Je voulais analyser 'command.json' dans src/main // js/Simulator.Java. Pour cela, j'ai copié le fichier json dans le dossier src et j'ai donné le chemin absolu comme ceci:
Object obj = parser.parse(new FileReader("./src/command.json"));