Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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
使用tomcat for java插件在vscode中运行war包时发生与“user.dir”系统属性异常相关的权限被拒绝_Tomcat_Visual Studio Code - Fatal编程技术网

使用tomcat for java插件在vscode中运行war包时发生与“user.dir”系统属性异常相关的权限被拒绝

使用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

我是VScode和tomcat for java插件的新手,我想用这个插件运行我的应用程序,但在启动时遇到了一个权限被拒绝的错误。启动时,代码将创建一个临时文件和一个FileOutputStream,引发异常的代码段如下所示,请注意,代码位于第三方jar文件中,因此我无法更改它

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.-它不是;-一只虫子。确定哪一个是问题所在,解决方案完全不同。收集尽可能多的信息(错误消息、路径、尝试列出目录中的文件、尝试读取其中一个文件……您可以命名它)并记录下来,这样您就可以找出实际的问题所在