使用时收到以下警告java.net.URLEncoder.encode:
warning: [deprecation] encode(java.lang.String)
in java.net.URLEncoder has been deprecated
我应该用什么呢?
摘要
我的JUnit测试没有找到执行期间所需的文件.我正在使用Maven进行依赖管理和编译.
细节
测试用例所需的所有文件都位于:src/test/resources.
例如,src/test/resources/resourceFile.txt.
要访问资源,我使用以下代码:
URL url = getClass().getResource("/resourceFile.txt").getFile();
File file = new File(url);
Run Code Online (Sandbox Code Playgroud)
但后来file.exists()回归false.而我得到的错误是:
Tests in error:
myJUnitTestCase(tests.MyJUnitTestClass): /home/me/workspace/Project%20Name/target/test-classes/resourceFile.txt (No such file or directory)
Run Code Online (Sandbox Code Playgroud)
注意,以下内容给出了相同的错误(注意删除的/前缀):
URL url = getClass().getClassLoader().getResource("resourceFile.txt").getFile();
File file = new File(url);
Run Code Online (Sandbox Code Playgroud)
似乎来自的文件src/test/resources没有被复制到target/test-classes.
有任何想法吗?
以下问题没有帮助
为什么我不能在使用Maven的Junit测试运行中访问src/test/resources?
软件版本
Ubuntu 12.04
Apache Maven 2.2.1
Java 1.7.0
Eclipse(面向Web开发人员的Java EE IDE)Indigo Service Release 2
(截断)Maven POM
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.groupId</groupId>
<artifactId>artifactId</artifactId> …Run Code Online (Sandbox Code Playgroud) 当我通过URL的InputStream读取xml,然后删除除url之外的所有内容时,我得到" http://cliveg.bu.edu/people/sganguly/player/%20Rang%20De%20Basanti%20-%20Tu% 20Bin%20Bataye.mp3 ".
如你所见,有很多"%20".
我希望网址不被转义.
有没有办法在Java中这样做,而不使用第三方库?
我正在开发独立于平台的应用程序.我收到一个文件URL*.在Windows上这些是:
file:///Z:/folder%20to%20file/file.txt
file://host/folder%20to%20file/file.txt (UNC路径)
我正在使用new File(URI(urlOfDocument).getPath())哪个适用于第一个,也适用于Unix,Linux,OS X,但不适用于UNC路径.
将文件转换为File(..)路径,与Java 6兼容的标准方法是什么?
......
*注意:我从OpenOffice/LibreOffice(XModel.getURL())收到这些URL.
这是我的项目的布局:
src/
test/
resources/
ares/
file1.xml
file2.xml
Run Code Online (Sandbox Code Playgroud)
这是Jenkins工作区的布局:
my-module/
target/
test-classes/
ares/
file1.xml
file2.xml
Run Code Online (Sandbox Code Playgroud)
在eclipse下,测试运行没有任何错误.在詹金斯,测试失败了.詹金斯无法找到资源.以下是测试执行的一些输出:
MyClass.class.getResourceAsStream(/ares/file1.xml) => java.io.BufferedInputStream@4f4b2f1a
MyClass.class.getResourceAsStream(ares/file1.xml) => null
Thread.currentThread().getContextClassLoader().getResourceAsStream(/ares/file1.xml) => null
Thread.currentThread().getContextClassLoader().getResourceAsStream(ares/file1.xml) => java.io.BufferedInputStream@5d402eeb
MyClass.class.getClassLoader().getResourceAsStream(/ares/file1.xml) => null
MyClass.class.getClassLoader().getResourceAsStream(ares/file1.xml) => java.io.BufferedInputStream@20c87621
Run Code Online (Sandbox Code Playgroud)
MyClass.class.getResourceAsStream(/ares/file1.xml) => null
MyClass.class.getResourceAsStream(ares/file1.xml) => null
Thread.currentThread().getContextClassLoader().getResourceAsStream(/ares/file1.xml) => null
Thread.currentThread().getContextClassLoader().getResourceAsStream(ares/file1.xml) => null
MyClass.class.getClassLoader().getResourceAsStream(/ares/file1.xml) => null
MyClass.class.getClassLoader().getResourceAsStream(ares/file1.xml) => null
Run Code Online (Sandbox Code Playgroud)
如你所见,詹金斯找不到我的资源.
我错过了什么?
我想在我的 java 类中读取一个文件。我的问题与此类似,但有两个不同之处。首先,我使用不同的项目布局:
/src/com/company/project
/resources
在资源文件夹中,我有一个名为“test.txt”的文件:
/资源/测试.txt
在项目文件夹中,我有一个类 test.java
/src/com/company/project/test.java
我希望 mu java 类能够以静态方法读取 test.txt 的内容。我尝试了以下方法:
private static String parseFile()
{
try
{
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
String fileURL = classLoader.getResource("test.txt").getFile();
File file = new File(fileURL);
...
}
}
Run Code Online (Sandbox Code Playgroud)
以及以下路径:
File file1 = new File("test.txt");
File file2 = new File("/test.txt");
File file3 = new File("/resources/test.txt");
Run Code Online (Sandbox Code Playgroud)
但是当我想读取文件时,它们都会抛出 FileNotFoundException 。如何根据我的项目设置以及该方法需要是静态的这一事实,在上面的代码片段中正确声明我的文件的路径?
java ×6
junit ×2
url ×2
classloader ×1
deprecated ×1
eclipse ×1
file ×1
jenkins ×1
m2e ×1
maven ×1
unit-testing ×1
url-encoding ×1
windows ×1