Java 从当前包中获取文件
这段代码在我的本地应用程序中运行良好,但当我们使用Bambol构建时,会出现“未找到文件”异常。有什么想法/解决办法吗Java 从当前包中获取文件,java,file,path,Java,File,Path,这段代码在我的本地应用程序中运行良好,但当我们使用Bambol构建时,会出现“未找到文件”异常。有什么想法/解决办法吗 final static String FILE_NAME ="/src/test/java/com/statement/SamplePDFStatementFile.txt"; file = new File(FILE_NAME); FileInputStream fis = new FileInputStream(file); 我基本上想测试一个读取文件的类。这是完整的代
final static String FILE_NAME ="/src/test/java/com/statement/SamplePDFStatementFile.txt";
file = new File(FILE_NAME);
FileInputStream fis = new FileInputStream(file);
我基本上想测试一个读取文件的类。这是完整的代码
//Main Class
public class PdfRenderer {
public void render(PdfFile pdfFile) throws IOException {
FileInputStream fis = new FileInputStream(pdfFile.getFile());
final HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
response.setHeader("Content-Disposition", " attachment; filename=" + pdfFile.getAttachmentName());
byte[] buff = new byte[2048];
int bytesRead;
while (-1 != (bytesRead = fis.read(buff, 0, buff.length))) {
response.getOutputStream().write(buff, 0, bytesRead);
}
response.getOutputStream().flush();
}
}
//Test
public class PdfRendererTest{
PdfFile pdfFile;
File file;
@Test
public void test_DetailStatementsByAccountNumber() throws Exception {
new AbstractSeamTest.ComponentTest() {
PdfRenderer actionBean = new PdfRenderer();
URL url = this.getClass().getResource("/SamplePDFStatementFile.txt");
final String FILE_NAME = url.getFile();
protected void testComponents() throws Exception {
file = new File(FILE_NAME);
context.checking(new Expectations() {{
one(pdfFile).getFile();
will(returnValue(file));
one(pdfFile).getAttachmentName();
will(returnValue(file.getName()));
}});
actionBean.render(pdfFile);
}
}.run();
}
}
我想设置Pdfile.getFile返回SamplePDFStatementFile.txt的期望值。如果我使用getResourceAsStream,我不知道如何将其转换为文件对象
好的。。所以现在我在用。看起来这就是答案:
public void inputStreamToFile() throws Exception{
InputStream inputStream = this.getClass().getResourceAsStream("/SamplePDFStatementFile.txt");
file = File.createTempFile("abc","def");
OutputStream out = new FileOutputStream(file);
int length = 0;
byte[] bytes = new byte[1024];
while ((length = inputStream.read(bytes)) != -1) {
out.write(bytes, 0, length);
}
inputStream.close();
out.flush();
out.close();
}
没有可靠的方法参照相对于项目根文件夹的文件 您需要将此文件作为资源引用。据我所知,你使用Maven。如果是这样,您需要将此文件放入/src/test/resources而不是/src/test/java中。也许您还可以配置Maven从/src/test/java获取资源,但这将违反Maven目录布局约定 之后,您可以将此文件作为
InputStream fis = getClass()
.getResourceAsStream("/com/statement/SamplePDFStatementFile.txt");
或者,如果当前类位于com.statement包中,则
InputStream fis = getClass().getResourceAsStream("SamplePDFStatementFile.txt");
没有可靠的方法参照相对于项目根文件夹的文件 您需要将此文件作为资源引用。据我所知,你使用Maven。如果是这样,您需要将此文件放入/src/test/resources而不是/src/test/java中。也许您还可以配置Maven从/src/test/java获取资源,但这将违反Maven目录布局约定 之后,您可以将此文件作为
InputStream fis = getClass()
.getResourceAsStream("/com/statement/SamplePDFStatementFile.txt");
或者,如果当前类位于com.statement包中,则
InputStream fis = getClass().getResourceAsStream("SamplePDFStatementFile.txt");
构建或运行时会出现异常?请参阅关于使用类加载器上下文类加载器中的getResource方法,或使用从根包com开始的路径加载当前类的方法。您使用的是一个绝对路径,看起来是这样。另外,该文件似乎位于SRC文件夹下,通常生成时会排除SRC文件夹,您能检查一下吗?它在生成它或运行它时会出现异常?请参阅关于从类加载器上下文类加载器或加载当前类的类加载器中使用getResource方法,使用从根包com开始的路径。您使用的是一个绝对路径,看起来是这样的。而且该文件似乎位于SRC文件夹下,通常不包括SRC文件夹,您能检查一下吗?根据您的建议,我已经将文本文件放在src/test/resources/SamplePDFStatementFile.txt下,并放在我的主类src/test/java/com/billmelater/csa/action/statement/PdfRendererTest.java中,我会输入流fis=getClass.getResourceAsStreamSamplePDFStatementFile.txt;但它又回来了null@Himalay:由于类的包与资源的文件夹不对应,因此需要按如下方式使用完整路径:getResourceAsStream/SamplePDFStatementFile.txt。谢谢axtavt。。你成就了我的一天。最后一点需要澄清的是,你是否认为下面的代码在执行方面是正确的。我不想再次破坏构建。URL URL=this.getClass.getResource/SamplePDFStatementFile.txt;最终字符串文件\u NAME=url.getFile;文件=新文件名;FileInputStream fis=新文件InputStreamPdfile.getFile@Himalay:这段代码看起来很奇怪,如果您的应用程序被打包到jar文件中,可能无法工作。getResourceAsStream有什么问题?基本上,我正在寻找一个引用物理文件的文件对象实例。文件-->SamplePDFStatementFile.txt根据您的建议,我已将文本文件放在src/test/resources/SamplePDFStatementFile.txt下,并放在我的主类src/test/java/com/billmelater/csa/action/statement/PdfRendererTest.java中,我会输入流fis=getClass.getResourceAsStreamSamplePDFStatementFile.txt;但它又回来了null@Himalay:由于类的包与资源的文件夹不对应,因此需要按如下方式使用完整路径:getResourceAsStream/SamplePDFStatementFile.txt。谢谢axtavt。。你成就了我的一天。最后一点需要澄清的是,你是否认为下面的代码在执行方面是正确的。我不想再次破坏构建。URL URL=this.getClass.getResource/SamplePDFStatementFile.txt;最终字符串文件\u NAME=url.getFile;文件=新文件名;FileInputStream fis=新文件InputStreamPdfile.getFile@Himalay:这段代码看起来很奇怪,如果您的应用程序被打包到jar文件中,可能无法工作。getResourceAsStream有什么问题?基本上,我正在寻找一个引用物理文件的文件对象实例。文件-->SamplePDFStatementFile.txt