Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不允许将文件下载到META-INF文件夹_Java_Spring Boot_Vaadin_Vaadin14 - Fatal编程技术网

Java 不允许将文件下载到META-INF文件夹

Java 不允许将文件下载到META-INF文件夹,java,spring-boot,vaadin,vaadin14,Java,Spring Boot,Vaadin,Vaadin14,我用的是Vaadin 14和上传器。当我要将文件保存到/META-INF/resources/audio/MyFolderName/MyFileName.mp3时,我收到以下异常消息: java.nio.file.AccessDeniedException:/META-INF 以下是我的最低代码: // Write String audioPath = "/META-INF/resources/audio/" + seletedLanguage.getValue() + &q

我用的是Vaadin 14和上传器。当我要将文件保存到
/META-INF/resources/audio/MyFolderName/MyFileName.mp3
时,我收到以下异常消息:

java.nio.file.AccessDeniedException:/META-INF

以下是我的最低代码:

// Write
String audioPath = "/META-INF/resources/audio/" + seletedLanguage.getValue() + "/" + fileName;
Path path = Paths.get(audioPath);
Files.createDirectories(path.getParent()); // <--- Here I got the error
FileOutputStream fos = new FileOutputStream(audioPath);
fos.write(buffer.getInputStream(fileName).readAllBytes());
fos.close();
// Read
String audioPath = "/META-INF/resources/audio/" + seletedLanguage.getValue() + "/" +  foreignSentence + ".mp3";
AbstractStreamResource resource = new StreamResource(foreignSentence, () -> getClass().getResourceAsStream(audioPath));
//写
字符串audioPath=“/META-INF/resources/audio/”+seletedLanguage.getValue()+“/”+文件名;
Path Path=Path.get(audioPath);
Files.createDirectories(path.getParent());//getClass().getResourceAsStream(音频路径));
其中,
buffer
来自
MultiFileMemoryBuffer

有人能告诉我是否可以完全访问Vaadin 14中的
META-INF
文件夹吗

我的目标是将文件下载到一个文件夹中,以便以后在web应用程序中使用这些文件


我正在尝试实现这样的目标,即可以从本地驱动器读取和写入文件,例如projet文件夹或打包后不会影响JAR文件的文件。

看起来您有一个。请解释一下你真正想要达到的目标
META-INF
是JAR文件中存放该JAR文件元数据的文件夹,下载的文件不属于
META-INF
文件夹(这方面的参考资料也不属于该文件夹)。根据您使用的路径,您正试图保存到本地文件系统上的
/META-INF
,而您的应用程序无法访问
/META-INF
(因为它不存在,或者您的用户无权在
/
中创建文件夹)。解决方案似乎非常明显:1)将文件写入本地文件系统中您具有适当写入权限的某个位置,2)在写入文件后更改读取文件的方式,以便代码在从文件系统上的指定路径读取时工作。似乎您提供了一个打开文件进行读取的函数,
()->getClass().getResourceAsStream(audioPath)
。只需将该代码更改为从文件系统位置而不是从类路径读取。
getClass().getResourceAsStream
通过使用当前类路径查找文件返回
InputStream
。您可以将此调用替换为返回
InputStream
的任何其他调用。在您的情况下,您不希望通过类路径查找文件。相反,由于您已经知道该文件的位置,因此您需要进行调用,根据其位置打开该文件
FileInputStream
为您提供了这一功能。因此,您需要类似于
()->new FileInputStream(audioPath)
的内容,而不是
()->getClass().getResourceAsStream(audioPath)
…同样,您不想写入
/META-INF/…
。您希望在系统上选择一个有意义且具有写入权限的位置。这通常是您的主目录中的一个位置。在这里,您可能需要类似于
String audioPath=System.getProperty(“user.home”)+/resources/audio/“+seletedLanguage.getValue()+”/“+文件名-我对你想做的事情的评论是否在正轨上,或者我完全错过了这里的机会?不,从来没有听说过。我只是对代码中的一两个一般性问题作出回应。这里的驱动力是,我认为无论您使用的是什么库或框架,您都不能或不应该写入以“/META-INF/”开头的任何路径/META-INF/”通常是应用程序Jar文件中的一个目录。它是用来读的,不是用来写的。请参阅:。