通过相对路径从资源加载文件(Spring)

时间:2015-09-15 15:55:34

标签: java spring

我有春季项目。我的文件在这里:/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”)为空

更新:抱歉愚蠢的问题。它有效,我设置了错误的文件名。

3 个答案:

答案 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 );
....
相关问题