Java 不允许将文件下载到META-INF文件夹
我用的是Vaadin 14和上传器。当我要将文件保存到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
/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文件中的一个目录。它是用来读的,不是用来写的。请参阅:。