英文:
Azure functions java read file inside a project / resources?
问题
我如何在将其托管为Azure函数时读取项目内(资源文件夹)的文件?
我尝试过以下代码:
public static File GetFileFromResources(String pathFromResources) {
File file;
ClassLoader classLoader = FilesHelper.class.getClassLoader();
URL url = classLoader.getResource(pathFromResources);
file = new File(url.getFile());
return file;
}
但是我收到了一个异常:
[09.08.2020 18:05:08] Caused by: java.io.FileNotFoundException: C:\Users\Maciej-pc\Desktop\AzureFunctionsss\hl7edytorFunctions\target\azure-functions\hl7edytorFunctions-1596901248640\file:\C:\Users\Maciej-pc\Desktop\AzureFunctionsss\hl7edytorFunctions\target\azure-functions\hl7edytorFunctions-1596901248640\hl7edytorFunctions-1.0-SNAPSHOT.jar!\somethinng.xsl (Nazwa pliku, nazwa katalogu lub skladnia etykiety woluminu jest niepoprawna)
[09.08.2020 18:05:08] at java.base/java.io.FileInputStream.open0(Native Method)
[09.08.2020 18:05:08] at java.base/java.io.FileInputStream.open(FileInputStream.java:219)
[09.08.2020 18:05:08] at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
[09.08.2020 18:05:08] at java.base/java.io.FileInputStream.<init>(FileInputStream.java:112)
文件名或文件夹名不正确。
我在本地机器上进行了测试。我希望它在本地主机和Azure上都能正常工作。
英文:
How can I read a file inside a project ( resources folder ) when I host it as an azure function?
I tried with:
public static File GetFileFromResources(String pathFromResources) {
File file;
ClassLoader classLoader = FilesHelper.class.getClassLoader();
URL url = classLoader.getResource(pathFromResources);
file = new File(url.getFile());
return file;
}
However I get an exception:
[09.08.2020 18:05:08] Caused by: java.io.FileNotFoundException: C:\Users\Maciej-pc\Desktop\AzureFunctionsss\hl7edytorFunctions\target\azure-functions\hl7edytorFunctions-1596901248640\file:\C:\Users\Maciej-pc\Desktop\AzureFunctionsss\hl7edytorFunctions\target\azure-functions\hl7edytorFunctions-1596901248640\hl7edytorFunctions-1.0-SNAPSHOT.jar!\somethinng.xsl (Nazwa pliku, nazwa katalogu lub skladnia
etykiety woluminu jest niepoprawna)
[09.08.2020 18:05:08] at java.base/java.io.FileInputStream.open0(Native Method)
[09.08.2020 18:05:08] at java.base/java.io.FileInputStream.open(FileInputStream.java:219)
[09.08.2020 18:05:08] at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
[09.08.2020 18:05:08] at java.base/java.io.FileInputStream.<init>(FileInputStream.java:112)
The filename or folder name is incorrect.
I testing it on the local machine. I would like to get it works on localhost and Azure.
答案1
得分: 1
以下是翻译好的代码部分:
public static String GetFileInStringFromResources(String pathToResources) throws IOException {
// 这是在jar文件内的路径
InputStream input = FilesHelper.class.getResourceAsStream("/resources/" + pathToResources);
// 这是在IDE内部
if (input == null) {
input = FilesHelper.class.getClassLoader().getResourceAsStream(pathToResources);
}
// 在这里,你可以返回 (InputStream) input 或者作为字符串返回
// return input;
// 将InputStream转换为String
ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = input.read(buffer)) != -1) {
result.write(buffer, 0, length);
}
return result.toString("UTF-8");
}
英文:
Ok here is a working method:
public static String GetFileInStringFromResources(String pathToResources) throws IOException {
// this is the path within the jar file
InputStream input = FilesHelper.class.getResourceAsStream("/resources/" + pathToResources);
// here is inside IDE
if (input == null) {
input = FilesHelper.class.getClassLoader().getResourceAsStream(pathToResources);
}
//here you can return (InputStream) input or you can return as string
//return input;
// convert InputStream to String
ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = input.read(buffer)) != -1) {
result.write(buffer, 0, length);
}
return result.toString("UTF-8");
}
答案2
得分: 0
这是我在Groovy中使用的方法:
public String GetFileInStringFromResources(String pathToResource) throws IOException {
// 这是jar文件内部的路径
InputStream input = this.getClass().getResourceAsStream(pathToResource)
// 这是从IDE内部获取的
if (input == null) {
input = this.getClass().getClassLoader().getResourceAsStream(pathToResource)
}
return input.getText("UTF-8")
}
请注意,资源需要保存在官方Maven资源目录中。
https://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html
英文:
This is what worked for me in Groovy:
public String GetFileInStringFromResources(String pathToResource) throws IOException {
// this is the path within the jar file
InputStream input = this.getClass().getResourceAsStream(pathToResource)
// here is from inside IDE
if (input == null) {
input = this.getClass().getClassLoader().getResourceAsStream(pathToResource)
}
return input.getText("UTF-8")
}
Note the resource needs to be saved in the official Maven resources directory.
https://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论