使用tomcat for java插件在vscode中运行war包时发生与“user.dir”系统属性异常相关的权限被拒绝
我是VScode和tomcat for java插件的新手,我想用这个插件运行我的应用程序,但在启动时遇到了一个权限被拒绝的错误。启动时,代码将创建一个临时文件和一个FileOutputStream,引发异常的代码段如下所示,请注意,代码位于第三方jar文件中,因此我无法更改它使用tomcat for java插件在vscode中运行war包时发生与“user.dir”系统属性异常相关的权限被拒绝,tomcat,visual-studio-code,Tomcat,Visual Studio Code,我是VScode和tomcat for java插件的新手,我想用这个插件运行我的应用程序,但在启动时遇到了一个权限被拒绝的错误。启动时,代码将创建一个临时文件和一个FileOutputStream,引发异常的代码段如下所示,请注意,代码位于第三方jar文件中,因此我无法更改它 File myFile = new File("a.txt"); out = new FileOutputStream(myFile); 我尝试使用原始tomcat使用命令行/startup.sh在tomcat/bin
File myFile = new File("a.txt");
out = new FileOutputStream(myFile);
我尝试使用原始tomcat使用命令行/startup.sh
在tomcat/bin目录下启动应用程序,我看到myFile的绝对路径是path/to/tomcat/bin
,当使用VScode tomcat插件时,myFile的绝对路径是/a.txt
,绝对没有写入权限
我搜索了很多关于这个问题的信息,发现在tomcat中创建相对路径文件时,路径将是user.dir
(系统属性)+filename
,而user.dir
将由启动tomcat的路径决定,因为startup.sh
在这个目录下,所以它是路径/to/tomcat/bin
因此,我试图通过在VScode中将user.dir
传递到customizejvmoptions
来向VM添加env参数,文件路径已成功更改,但仍然获得了权限拒绝
异常。我甚至尝试将文件路径更改为与原始tomcat相同的路径,但仍然没有成功
所以我想知道运行war包时,
user.dir
系统属性是什么?右键单击war包,然后选择runontomcat服务器
?如何解决这个问题?使用tomcat时,最好使用绝对路径(除了war中的任何只读文件之外)
检查下面的链接
“user.dir”属性是执行Java的工作文件夹
(此处显示的示例)并且即使使用-D也无法更改它
属性执行JVM时。如果要更改
“user.dir”,您必须更改Java执行到的文件夹
启动雄猫
谢谢你的回答。关于java用来启动tomcat的文件夹,问题是,我真的不知道它在哪里。我检查了我分配的VScode工作区,在该目录下,有几个tomcat目录应该与我在VScode中创建的tomcat实例相对应,但是在这些tomcat目录下没有
bin
目录,所以我如何知道文件夹路径?关于您回答的另一个问题是,在执行JVM时使用-D属性,dir路径确实发生了更改,因此我不太确定您的引用中的答案。绝对路径实际上意味着您不需要知道tomcat在哪里运行。你不知道java在哪里执行是什么意思?使用System.getProperty(“user.dir”)时,您没有足够的信息?-我不能使用绝对路径,代码在第三方jar中。-System.getProperty(“user.dir”)将返回应用程序没有写入任何文件权限的路径我可以使用JVM参数更改user.dir
,但应用程序仍然没有在新路径上写入文件的权限(这似乎是一个有效的写入路径)。“似乎是”表示:1.-它不是;-一只虫子。确定哪一个是问题所在,解决方案完全不同。收集尽可能多的信息(错误消息、路径、尝试列出目录中的文件、尝试读取其中一个文件……您可以命名它)并记录下来,这样您就可以找出实际的问题所在