我的代码在一个JAR文件中运行,比如说foo.jar,我需要在代码中知道运行foo.jar的文件夹.
所以,如果foo.jar在C:\FOO\,我想要获得该路径,无论我当前的工作目录是什么.
我需要在使用Java的资源属性中使用UTF-8 ResourceBundle.当我将文本直接输入属性文件时,它显示为mojibake.
我的应用在Google App Engine上运行.
谁能举个例子?我无法完成这项工作.
java google-app-engine resourcebundle utf-8 internationalization
有谁知道如何以编程方式找出java类加载器实际加载类的位置?
我经常在大型项目上工作,其中类路径变得非常长并且手动搜索不是真正的选项.我最近遇到了一个问题,类加载器加载了一个不正确的类版本,因为它位于两个不同位置的类路径中.
那么我怎样才能让类加载器告诉我实际的类文件来自磁盘的哪个位置?
编辑:如果由于版本不匹配(或其他东西),类加载器实际上无法加载类,那么我们是否可以找到它在读取之前尝试读取的文件?
我需要将数据存储到.jar文件中的文件中并再次读取.
我知道我可以使用Class.getResourceAsStream()方法,但它会返回一个InputStream我可以读取的内容.但我想找一种写作方式.
在应用程序类路径上(例如在jar中),您可以拥有一个application.properties,它为name提供合理的默认属性值.在新环境中运行时,可以在jar外部提供覆盖名称的application.properties
我将重复的application.properties与覆盖的名称放在与jar文件相同的路径上,但是在运行应用程序时:
java -jar target/myproject-0.0.1-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)
名称值没有被覆盖,它仍然指的是jar文件中的application.properties里面的一个.我也尝试过:
java -Dspring.config.location=/target/application.properties -jar target/myproject-0.0.1-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)
但它不起作用,请帮忙.
编辑
当我将当前目录更改为target并运行它时,它可以工作.
java -jar myproject-0.0.1-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)
为什么?为什么不能在路径之外运行呢?
我正在尝试从jar文件中访问资源.资源位于jar的同一目录中.
my-dir:
tester.jar
test.jpg
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的东西,包括以下内容,但每次输入流为空时:
[1]
String path = new File(".").getAbsolutePath();
InputStream inputStream = this.getClass().getResourceAsStream(path.replace("\\.", "\\") + "test.jpg");
Run Code Online (Sandbox Code Playgroud)
[2]
File f = new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
InputStream inputStream = this.getClass().getResourceAsStream(f.getParent() + "test.jpg");
Run Code Online (Sandbox Code Playgroud)
你能给我一些提示吗?谢谢.
java ×6
classpath ×2
inputstream ×2
jar ×2
classloader ×1
getresource ×1
outputstream ×1
path ×1
spring-boot ×1
utf-8 ×1