Ik heb een project met 2 pakketten:
tkorg.idrs.core.searchengines
tkorg.idrs.core.searchengines
In pakket (2) heb ik een tekstbestand ListStopWords.txt
, in pakket (1) heb ik een klasse FileLoadder
. Hier is code in FileLoadder
:
File file = new File("properties\\files\\ListStopWords.txt");
Maar heb deze fout:
The system cannot find the path specified
Kun je een oplossing geven om het te repareren? Bedankt.
Antwoord 1, autoriteit 100%
Als het al in het klassenpad staat, verkrijg het dan gewoon van het klassenpad in plaats van van het schijfbestandssysteem. Knoei niet met relatieve paden in java.io.File
. Ze zijn afhankelijk van de huidige werkdirectory waarover je totaal geen controle hebt vanuit de Java-code.
Ervan uitgaande dat ListStopWords.txt
zich in hetzelfde pakket bevindt als uw klasse FileLoadder
, doet u het volgende:
URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.getPath());
Of als alles wat je uiteindelijk zoekt eigenlijk een InputStream
is:
InputStream input = getClass().getResourceAsStream("ListStopWords.txt");
Dit heeft zeker de voorkeur boven het maken van een new File()
omdat de url
niet noodzakelijk een schijfbestandssysteempad vertegenwoordigt, maar het kan ook een virtueel bestandssysteempad vertegenwoordigen (wat kan gebeuren wanneer de JAR wordt uitgebreid naar het geheugen in plaats van naar een tijdelijke map op het schijfbestandssysteem) of zelfs een netwerkpad die beide niet per definitie kunnen worden verwerkt door de File
-constructor.
Als het bestand is -zoals de pakketnaam doet vermoeden- is eigenlijkeen volwaardige eigenschappenbestand(met key=value
regels) met alleen de “verkeerde” extensie, dan zou je de InputStream
onmiddellijk kunnen voeden naar de load()
methode.
Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("ListStopWords.txt"));
Opmerking: wanneer u toegang probeert te krijgen vanuit de static
-context, gebruik dan FileLoader.class
(of wat dan ook YourClass.class
) in plaats van getClass()
in bovenstaande voorbeelden.
Antwoord 2, autoriteit 32%
Het relatieve pad werkt in Java met de .
specificatie.
.
betekent dezelfde map als de huidige context...
betekent de bovenliggende map van de huidige context.
Dus de vraag is hoe weet je het pad waar de Java momenteel naar zoekt?
Doe een klein experiment
File directory = new File("./");
System.out.println(directory.getAbsolutePath());
Let op de uitvoer, u zult de huidige map leren kennen waar Java naar zoekt. Gebruik vanaf daar gewoon de specificatie ./
om uw bestand te lokaliseren.
Bijvoorbeeld als de uitvoer is
G:\JAVA8Ws\MyProject\content.
en uw bestand is aanwezig in de map “MyProject”, gebruik gewoon
File resourceFile = new File("../myFile.txt");
Hopelijk helpt dit.
Antwoord 3, autoriteit 25%
De volgende regel kan worden gebruikt als we het relatieve pad van het bestand willen specificeren.
File file = new File("./properties/files/ListStopWords.txt");
Antwoord 4, autoriteit 5%
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();
}
Antwoord 5, autoriteit 3%
probeer .\properties\files\ListStopWords.txt
Antwoord 6, autoriteit 3%
Ik had kunnen reageren, maar daar heb ik minder reputatie voor.
Het antwoord van Samrat deed het werk voor mij. Het is beter om het huidige mappad te zien via de volgende code.
File directory = new File("./");
System.out.println(directory.getAbsolutePath());
Ik heb het gewoon gebruikt om een probleem te verhelpen waar ik in mijn project werd geconfronteerd. Gebruik het om te gebruiken ./ om terug naar de bovenliggende map van de huidige map.
./test/conf/appProperties/keystore
7, Autoriteit 2%
Aangenomen dat u wilt lezen van resources
map in FileSystem
klasse.
String file = "dummy.txt";
var path = Paths.get("src/com/company/fs/resources/", file);
System.out.println(path);
System.out.println(Files.readString(path));
Opmerking: toonaangevend .
is niet nodig.
8
Ik wilde parse ‘Command.json’ in Src / Main // JS / Simulator.java. Daarvoor kopieerde ik JSON-bestand in SRC-map en gaf het absolute pad als volgt:
Object obj = parser.parse(new FileReader("./src/command.json"));
9
Voor mij is het probleem eigenlijk dat het klassepad van het File-object afkomstig is van <project folder path> or ./src
, dus gebruik File file = new File("./src/xxx.txt");
mijn probleem opgelost
Antwoord 10
Voor mij werkte het met –
String token = "";
File fileName = new File("filename.txt").getAbsoluteFile();
Scanner inFile = null;
try {
inFile = new Scanner(fileName);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while( inFile.hasNext() )
{
String temp = inFile.next( );
token = token + temp;
}
inFile.close();
System.out.println("file contents" +token);
Antwoord 11
String basePath = new File(“myFile.txt”).getAbsolutePath();
dit basispad kun je gebruiken als het juiste pad van je bestand
Antwoord 12
als je het eigenschappenbestand wilt laden uit de bronnenmap die beschikbaar is in de src-map, gebruik dan dit
String resourceFile = "resources/db.properties";
InputStream resourceStream = ClassLoader.getSystemClassLoader().getResourceAsStream(resourceFile);
Properties p=new Properties();
p.load(resourceStream);
System.out.println(p.getProperty("db"));
db.properties-bestanden bevatten sleutel en waarde db=sybase
Antwoord 13
Als u getClass()
probeert aan te roepen vanuit de Static-methode of het statische blok, kunt u dit op de volgende manier doen.
Je kunt getClass()
aanroepen op het Properties
-object waarin je laadt.
public static Properties pathProperties = null;
static {
pathProperties = new Properties();
String pathPropertiesFile = "/file.xml;
InputStream paths = pathProperties.getClass().getResourceAsStream(pathPropertiesFile);
}
Antwoord 14
Als het tekstbestand niet wordt gelezen, probeer dan een dichter absoluut pad te gebruiken (als je wilt .)
je zou het volledige absolute pad kunnen gebruiken,) als volgt:
FileInputStream fin=new FileInputStream("\\Dash\\src\\RS\\Test.txt");
neem aan dat het absolute pad is:
C:\\Folder1\\Folder2\\Dash\\src\\RS\\Test.txt