我收到一个找到本地文件的URL(我收到的URL不在我的控制范围内).URL按RFC2396中的定义进行有效转义.如何将其转换为Java File对象?
有趣的是,URL getFile()方法返回一个String,而不是File.
我已经创建了一个名为"/ tmp/some dir"的目录(在"some"和"dir"之间有一个间距字符),它通过以下URL正确定位:"file:/// tmp/some%20dir" (为清楚起见,添加了引号).
如何将该URL转换为Java文件?
要提供有关我的问题的更多详细信息,以下打印为false:
URL url = new URL( "file:///tmp/some%20dir" );
File f = new File( url.getFile() );
System.out.println( "Does dir exist? " + f.exists() );
Run Code Online (Sandbox Code Playgroud)
而以下(用空格手动替换"%20")打印为true:
URL url = new URL( "file:///tmp/some%20dir" );
File f = new File( url.getFile().replaceAll( "%20", " " ) );
System.out.println( "Does dir exist? " + f.exists() );
Run Code Online (Sandbox Code Playgroud)
请注意,我不是在问为什么第一个示例打印为false,为什么使用我的hacky replaceAll的第二个示例打印为true,我问如何将转义的URL转换为Java File对象.
编辑:谢谢大家,这几乎是一个骗局但不完全.
愚蠢的是我在URL类本身中寻找一个帮助方法.
以下按预期从Java URL获取Java文件:
URL url = new URL( "file:///home/nonet/some%20dir" ); …Run Code Online (Sandbox Code Playgroud) 我在运行以下代码时遇到问题:
configService.setMainConfig("src/test/resources/MainConfig.xml");
Run Code Online (Sandbox Code Playgroud)
来自Junit @Before方法.
这是Maven构建其目标文件夹的方式吗?
我正在尝试在我的JUnit测试执行期间从我的类路径加载sample.properties,它无法在类路径中找到该文件.如果我编写Java Main类,我可以正常加载文件.我正在使用下面的ant任务来执行我的JUnit.
public class Testing {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
Properties props = new Properties();
InputStream fileIn = props_.getClass().getResourceAsStream("/sample.properties");
**props.load(fileIn);**
}
}
Run Code Online (Sandbox Code Playgroud)
JUnit的:
<path id="compile.classpath">
<pathelement location="${build.classes.dir}"/>
</path>
<target name="test" depends="compile">
<junit haltonfailure="true">
<classpath refid="compile.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="${test.suite}"/>
</junit>
</target>
<target name="compile">
<javac srcdir="${src.dir}"
includeantruntime="false"
destdir="${build.classes.dir}" debug="true" debuglevel="lines,vars,source">
<classpath refid="compile.classpath"/>
</javac>
<copy todir="${build.classes.dir}">
<fileset dir="${src.dir}/resources"
includes="**/*.sql,**/*.properties" />
</copy>
</target>
Run Code Online (Sandbox Code Playgroud)
输出:
[junit] Tests run: 0, Failures: 0, Errors: 1, Time elapsed: 0.104 sec
[junit]
[junit] …Run Code Online (Sandbox Code Playgroud) 这是我的项目的布局:
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)
如你所见,詹金斯找不到我的资源.
我错过了什么?
在TDD(Test Driven Development)开发过程中,如何处理测试数据?假设一个场景,解析一个日志文件以获取所需的列.对于强大的测试,我如何准备测试数据?我是否正确地将这些文件放到测试类文件中?