我有一个包含2个包的项目:
tkorg.idrs.core.searchengines
tkorg.idrs.core.searchengines
在包(2)中,我有一个文本文件ListStopWords.txt
,在包(1)中我有一个类FileLoadder
。以下是FileLoader
中的代码:
File file = new File("properties\\files\\ListStopWords.txt");
但是有这个错误:
The system cannot find the path specified
你能解决一下吗?感谢。
答案 0 :(得分:145)
如果它已经在类路径中,那么只需从类路径中获取它。不要在java.io.File
中摆弄相对路径。它们依赖于当前的工作目录,您无法从Java代码中完全控制它。
假设ListStopWords.txt
与FileLoader
类在同一个包中:
URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.getPath());
或者,如果您只是InputStream
之后的所有内容:
InputStream input = getClass().getResourceAsStream("ListStopWords.txt");
如果文件是-as包名称提示 - 实际上一个完全properties file(包含key=value
行)只有“错误”扩展名,那么你可以立即将其提供给load()
方法。
Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("ListStopWords.txt"));
注意:当您尝试从static
上下文中访问它时,请在上面的示例中使用FileLoader.class
代替getClass()
。
答案 1 :(得分:38)
如果我们想指定文件的相对路径,可以使用以下行。
File file = new File("./properties/files/ListStopWords.txt");
答案 2 :(得分:23)
相对路径在java中使用。操作
所以问题是你如何知道java当前正在寻找的路径?
做一个小实验
File directory = new File("./");
System.out.println(directory.getAbsolutePath());
观察输出,您将了解java正在查找的当前目录。从那里,只需使用./运算符来定位您的文件。
例如,如果输出是
G:\ JAVA8Ws \ MyProject的\含量
并且您的文件存在于MyProject文件夹中,只需使用
File resourceFile = new File("../myFile.txt");
希望这有帮助
答案 3 :(得分:7)
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();
}
答案 4 :(得分:6)
尝试.\properties\files\ListStopWords.txt
答案 5 :(得分:4)
虽然BalusC提供的答案适用于这种情况,但是当文件路径包含空格时它会中断,因为在URL中,这些将被转换为%20,这不是有效的文件名。如果使用URI而不是String构造File对象,则将正确处理空格:
URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.toURI());
答案 6 :(得分:2)
我本来可以发表评论,但我的代表较少。 Samrat的回答为我做了工作。最好通过以下代码查看当前目录路径。
File directory = new File("./");
System.out.println(directory.getAbsolutePath());
我只是用它来纠正我在项目中遇到的问题。确保使用./返回当前目录的父目录。
./test/conf/appProperties/keystore
答案 7 :(得分:1)
对我来说,实际上问题是File对象的类路径来自<project folder path> or ./src
,所以使用File file = new File("./src/xxx.txt");
解决了我的问题
答案 8 :(得分:1)
对我来说它适用于 -
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);
答案 9 :(得分:0)
我想解析&#39; command.json&#39;在src / main // js / Simulator.java中。为此,我在src文件夹中复制了json文件并给出了这样的绝对路径:
Object obj = parser.parse(new FileReader("./src/command.json"));
答案 10 :(得分:0)
假设您想从resources
类的FileSystem
目录中读取内容。
String file = "dummy.txt";
var path = Paths.get("src/com/company/fs/resources/", file);
System.out.println(path);
System.out.println(Files.readString(path));
注意:不需要开头.
。
答案 11 :(得分:0)
String basePath = new File(“ myFile.txt”)。getAbsolutePath(); 您可以使用此基本路径作为文件的正确路径
答案 12 :(得分:0)
如果你想从 src 文件夹内的资源文件夹加载属性文件,使用这个
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 文件包含键和值 db=sybase
答案 13 :(得分:-1)
如果您尝试从静态方法或静态阻止中调用getClass()
,则可以执行以下操作:
您可以在正在加载的getClass()
对象上调用Properties
。
public static Properties pathProperties = null;
static {
pathProperties = new Properties();
String pathPropertiesFile = "/file.xml;
InputStream paths = pathProperties.getClass().getResourceAsStream(pathPropertiesFile);
}
答案 14 :(得分:-1)
如果没有读取文本文件,请尝试使用更接近的绝对路径(如果您愿意的话) 你可以使用完整的绝对路径,)像这样:
FileInputStream fin=new FileInputStream("\\Dash\\src\\RS\\Test.txt");
假设绝对路径为:
C:\\Folder1\\Folder2\\Dash\\src\\RS\\Test.txt