我有春季项目。我的文件在这里:/src/main/java/resources/file.txt。
我如何才能获得完整的路径?
如果我从测试开始运行:
class Communicate: UIViewController {
let socket = SocketIOClient(socketURL: "localhost:2000")
override func viewDidLoad() {
super.viewDidLoad()
self.addHandlers()
self.socket.connect()
}
func addHandlers() {
socket.on("connect") {data, ack in
print("socket connected !") // This is working
self.socket.emit("get", ["url": "/device"]) // I get the sails error
}
}
}
但是如果我使用tomcat,它会在tomcat文件夹中显示另一条路径。所以春天找不到这条路。
编辑: this.getClass()。getClassLoader()。getResource(“file.txt”)为空
更新:抱歉愚蠢的问题。它有效,我设置了错误的文件名。
答案 0 :(得分:3)
由于文件 - file.txt
位于资源目录中,通常会通过构建过程(像Maven,Gradle这样的工具)将其复制到class-path
。使用相对路径加载文件很容易。
该主题广泛讨论了如何从class-path
加载文件。
How to really read text file from classpath in Java
答案 1 :(得分:0)
使用Spring,您可以使用课程ClassPathResource
。它可以从java类路径中读取文件而不需要太多纯Java样板代码。
答案 2 :(得分:0)
相对路径取决于当前上下文上下文:应用程序,库等。
您可以挖掘文档或仅添加类似内容
File fn = new File("resources/database.db");
logger.info(fn.getAbsolutePath());
查看当前路径在那一刻。
例如,在Spring @Configuration块中创建SQLite数据源
@Configuration
.....
@Bean
....
String dbName="database.sqlite";
File fn = new File("src/main/resources/"+dbName);
String name=fn.toURI().toString();
dataSourceBuilder.url("jdbc:sqlite:"+name );
....