簡體   English   中英

InputStream中的相對路徑

[英]Relative path in InputStream

我有兩個問題。

  1. 如何使用文件Export.xlsx位於目錄res/而不是這個

    try ( FileInputStream fileInputStream = new FileInputStream("C:\\\\Users\\\\student3\\\\"+sfilename+".xlsx"))

  2. 從文件中讀取數據,該文件位於.jar archieve所在的目錄中。

我嘗試了什么?

為第1。 Q值。

String path = "res/"+sfilename+".xlsx";
System.out.println(getClass().getClassLoader().getResource(path).toString());
File file2 = new File(getClass().getClassLoader().getResource(path).toString());
try ( FileInputStream fileInputStream = new FileInputStream(file2))

file:/C:/Users/student/IdeaProjects/batch/out/production/batch/res/ExportBatch.xlsx
Work is finished!
java.io.FileNotFoundException: file:\C:\Users\student3\IdeaProjects\batch\out\production\batch\res\ExportBatch.xlsx (Синтаксическая ошибка в имени файла, имени папки или метке тома)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at workhere.WriterXlsx.<init>(WriterXlsx.java:20)
    at workhere.Start.start(Start.java:62)
    at workhere.Start.main(Start.java:24)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

在此輸入圖像描述

你在路上。

方法ClassLoader.getResource返回一個URL對象。 您的System.out.println語句打印出此URL。 您可以看到URL協議“file:”。

問題: File構造函數不期望URL,而只是文件的路徑。 這就是為什么FileInputStream無法找到該文件的原因。

解決方案:您無需自己創建InputStream 只需使用URL.openStream 甚至更好:使用ClassLoader.getResourceAsStream向類加載器詢問它。

例:

String path = "res/" + sfilename + ".xlsx";
URL resURL = getClass().getClassLoader().getResource(path);
try (InputStream inputStream = resURL.openStream()) {
    ...
}

要么:

String path = "res/" + sfilename + ".xlsx";
try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream(path)) {
    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM