Ank*_*rma 1 java servlets file
我正在servlet中工作并有以下代码:
public void doPost(blah blah){
response.setContentType("text/html");
String datasent = request.getParameter("dataSent");
System.out.println(datasent);
try{
FileWriter writer = new FileWriter("C:/xyz.txt");
writer.write("hello");
System.out.println("I wrote");
}catch(Exception ex){
ex.printStackTrace();
}
response.getWriter().write("I am from server");
}
Run Code Online (Sandbox Code Playgroud)
但每次它都会抛出一个错误,说“访问被拒绝”。即使该文件没有锁定并且没有名称为C:/xyz.txt的文件
我应该怎么办?;(
java.io.FileNotFoundException: C:\xyz.txt (Access is denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:212)
at java.io.FileOutputStream.<init>(FileOutputStream.java:104)
at java.io.FileWriter.<init>(FileWriter.java:63)
at test.TestServlet.doPost(TestServlet.java:49)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:237)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Run Code Online (Sandbox Code Playgroud)
尝试关闭 FileWriter:
writer.close();
Run Code Online (Sandbox Code Playgroud)
我想象会发生什么:Tomcat 中的一个线程创建文件并终止,但没有关闭其句柄,因此从文件系统视图来看文件锁没有释放。另一个线程尝试打开它进行写入,但操作系统仍然无法授予对该文件的写访问权限,因为它已经有一个待处理的文件。
这就是所谓的资源泄漏:垃圾收集器不会释放程序员手动分配的资源(这里是IO句柄)
归档时间: |
|
查看次数: |
8069 次 |
最近记录: |