如何使用java为Windows VM上的其他用户管理文件权限

如何使用java为Windows VM上的其他用户管理文件权限,java,windows,jmeter,Java,Windows,Jmeter,我正在编写一个Jmeter脚本,并且正在处理一些我在JSR223采样器中控制的文件。问题是我需要创建一个本地文件,但是如果该文件名已经存在,我想在重新创建它之前删除它。我的代码在我的笔记本电脑(Windows10)上运行良好,但我现在正在将Jmeter脚本移植到测试环境中的虚拟机上,这似乎是问题的一部分。虚拟机运行的是Windows Server 2019,但这是学术性的。我使用我的标准内部公司凭据访问该机器 我的问题是:如何强制删除该文件,或单独修改其系统访问权限,以便继续删除 我是一名Jav

我正在编写一个Jmeter脚本,并且正在处理一些我在JSR223采样器中控制的文件。问题是我需要创建一个本地文件,但是如果该文件名已经存在,我想在重新创建它之前删除它。我的代码在我的笔记本电脑(Windows10)上运行良好,但我现在正在将Jmeter脚本移植到测试环境中的虚拟机上,这似乎是问题的一部分。虚拟机运行的是Windows Server 2019,但这是学术性的。我使用我的标准内部公司凭据访问该机器

我的问题是:如何强制删除该文件,或单独修改其系统访问权限,以便继续删除

我是一名Java编码新手,但在其他方面我是一名经验丰富的集成人员,在30多年前的许多编码语言中都有广泛的经验

Java版本:

  • 我的本地机器:v8更新261
  • 虚拟机:v8更新261
Jmeter版本:

  • 我的本地机器:Jmeter 5.2.1
  • 虚拟机:Jmeter 5.3
根本原因似乎是在VM上,当我的Jmeter任务创建文件,然后我在Windows资源管理器中检查它时:我的帐户具有完全权限,而主机上的本地“用户”帐户仅具有读取权限(请参阅所附屏幕截图)。当我的代码需要删除文件时,Jmeter脚本似乎只访问只读版本,因此无法删除或覆盖它。

请注意,如果我在Windows中手动编辑访问属性,以便本地用户具有完全访问权限,则我的代码运行时不会出现任何问题,文件将被删除

当达到delete方法时,我的控制台日志会报告以下消息:

JSR223采样器:JSR223脚本生成plink脚本文件(BSS)中存在问题 MNP文件),消息:javax.script.ScriptException: java.io.FileNotFoundException:D:\SLAB Automation\Jmeter Scripts\Scripts\check\u bss\u mnp\u BRP\u files.plink(访问被拒绝)

这是我的代码,它是Groovy脚本引擎中的Java

//  if the file exists. If it does, delete it and recreate it.
f= new File(fPath);
if (f.exists()) { 
    log.info("File " + fName + " exists.. deleting it.");
    System.gc();            // Run Garbage collection (Found a solution that suggests to do this, but it makes no difference)
    f.setWritable(true);    // Try modifying the permissions; also fails.
    f.delete();             // *** Here is my problem ***
} 

// Open File 
f = new FileOutputStream(fPath, false);     // Second param: true to append; false to overwrite (what we want)
p = new PrintStream(f); 
// Write data to file 
p.println( "*** my content ***");
// Close File(s)
p.close();
f.close();
log.info("-- Created file: " + fPath);
对于需要堆栈跟踪的任何人,为了完整起见:

2020-09-09 18:32:21,317 ERROR o.a.j.p.j.s.JSR223Sampler: Problem in JSR223 script Build plink Script File (BSS MNP File ), message: javax.script.ScriptException: java.io.FileNotFoundException: D:\SLAB Automation\Jmeter Scripts\scripts\check_bss_mnp_BRP_files.plink (Access is denied)
javax.script.ScriptException: java.io.FileNotFoundException: D:\SLAB Automation\Jmeter Scripts\scripts\check_bss_mnp_BRP_files.plink (Access is denied)
    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:320) ~[groovy-jsr223-3.0.3.jar:3.0.3]
    at org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:71) ~[groovy-jsr223-3.0.3.jar:3.0.3]
    at javax.script.CompiledScript.eval(Unknown Source) ~[?:1.8.0_261]
    at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:222) ~[ApacheJMeter_core.jar:5.3]
    at org.apache.jmeter.protocol.java.sampler.JSR223Sampler.sample(JSR223Sampler.java:72) [ApacheJMeter_java.jar:5.3]
    at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:630) [ApacheJMeter_core.jar:5.3]
    at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:558) [ApacheJMeter_core.jar:5.3]
    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:489) [ApacheJMeter_core.jar:5.3]
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256) [ApacheJMeter_core.jar:5.3]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_261]
Caused by: java.io.FileNotFoundException: D:\SLAB Automation\Jmeter Scripts\scripts\check_bss_mnp_BRP_files.plink (Access is denied)
    at java.io.FileOutputStream.open0(Native Method) ~[?:1.8.0_261]
    at java.io.FileOutputStream.open(Unknown Source) ~[?:1.8.0_261]
    at java.io.FileOutputStream.<init>(Unknown Source) ~[?:1.8.0_261]
    at java.io.FileOutputStream.<init>(Unknown Source) ~[?:1.8.0_261]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_261]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_261]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_261]
    at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:1.8.0_261]
    at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:72) ~[groovy-3.0.3.jar:3.0.3]
    at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:105) ~[groovy-3.0.3.jar:3.0.3]
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:59) ~[groovy-3.0.3.jar:3.0.3]
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:263) ~[groovy-3.0.3.jar:3.0.3]
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:286) ~[groovy-3.0.3.jar:3.0.3]
    at Script115.run(Script115.groovy:40) ~[?:?]
    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:317) ~[groovy-jsr223-3.0.3.jar:3.0.3]
    ... 9 more
2020-09-09 18:32:21317错误o.a.j.p.j.s.JSR223采样器:JSR223脚本生成plink脚本文件(BSS MNP文件)中存在问题,消息:javax.script.ScriptException:java.io.FileNotFoundException:D:\SLAB Automation\Jmeter Scripts\Scripts\check_BSS_MNP_BRP_files.plink(访问被拒绝)
javax.script.ScriptException:java.io.FileNotFoundException:D:\SLAB Automation\Jmeter Scripts\Scripts\check\u bss\u mnp\u BRP\u files.plink(访问被拒绝)
在org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:320)~[groovy-jsr223-3.0.3.jar:3.0.3]
在org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:71)~[groovy-jsr223-3.0.3.jar:3.0.3]
在javax.script.CompiledScript.eval(未知源代码)~[?:1.8.0_261]
在org.apache.jmeter.util.jsr23testelement.processFileOrScript(jsr23testelement.java:222)~[ApacheJMeter_core.jar:5.3]
在org.apache.jmeter.protocol.java.sampler.jsr23sampler.sample(jsr23sampler.java:72)[ApacheJMeter_java.jar:5.3]
位于org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:630)[ApacheJMeter_core.jar:5.3]
在org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:558)[ApacheJMeter_core.jar:5.3]
位于org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:489)[ApacheJMeter_core.jar:5.3]
在org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256)[ApacheJMeter_core.jar:5.3]
在java.lang.Thread.run(未知源代码)[?:1.8.0_261]
原因:java.io.FileNotFoundException:D:\SLAB Automation\Jmeter Scripts\Scripts\check\u bss\u mnp\u BRP\u files.plink(访问被拒绝)
在java.io.FileOutputStream.open0(本机方法)~[?:1.8.0_261]
在java.io.FileOutputStream.open(未知源代码)~[?:1.8.0_261]
在java.io.FileOutputStream(未知源代码)~[?:1.8.0_261]
在java.io.FileOutputStream(未知源代码)~[?:1.8.0_261]
在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)~[?:1.8.0\u 261]
在sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源)~[?:1.8.0_261]
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知源)~[?:1.8.0_261]
在java.lang.reflect.Constructor.newInstance(未知源代码)~[?:1.8.0_261]
在org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:72)~[groovy-3.0.3.jar:3.0.3]
在org.codehaus.groovy.runtime.callsite.ConstructorSite$constructorsiteNounewrapnocerce.callConstructor(ConstructorSite.java:105)~[groovy-3.0.3.jar:3.0.3]
在org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:59)~[groovy-3.0.3.jar:3.0.3]
在org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:263)~[groovy-3.0.3.jar:3.0.3]
在org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:286)~[groovy-3.0.3.jar:3.0.3]
在Script115.run(Script115.groovy:40)~[?:?]
在org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:317)~[groovy-jsr223-3.0.3.jar:3.0.3]
... 9更多

您可以执行以下操作并检查它是否有效吗

  • 确保执行Jmeter脚本的计算机中存在目录/文件夹D:\SLAB Automation\Jmeter Scripts\Scripts\exists
  • 最好避免在目录/文件夹名称中使用空格。您可以删除目录中的空格,并相应地更新测试计划

  • 请确保登录用户具有将文件读/写到系统中的权限。根据您的输入,这里似乎没有任何问题

  • 您可以尝试使用J运行groovy脚本吗