简体   繁体   English

为什么 FileWriter 不创建新文件?

[英]Why FileWriter doesn't create a new file?

Consider the following code:考虑以下代码:

 m_Writer = new PrintWriter(new FileWriter("LoginHistory.dat")); 
 m_Writer.println(Integer.toString(s_NumOfLogins)); 
 m_Writer.println(m_LoginHistoryStr);
 m_Writer.close();   

Any ideas why I don't find any file called LoginHistory.dat?有什么想法为什么我找不到任何名为 LoginHistory.dat 的文件?
Thanks谢谢

Update: I've just found that I get an exception after line:更新:我刚刚发现行后出现异常:

m_Writer = new PrintWriter(new FileWriter("LoginHistory.dat"));

and its details are:其详细信息是:
Any ideas what is the real problem?任何想法真正的问题是什么?

Listening for transport dt_shmem at address: tomcat_shared_memory_id
27/05/2012 15:52:17 org.apache.catalina.startup.HostConfig checkResources
INFO: Undeploying context [/SignInAndGetIp]
27/05/2012 15:52:17 org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor SignInAndGetIp.xml from C:\Users\user\.netbeans\7.1.2\apache-tomcat-7.0.22.0_base\conf\Catalina\localhost
27/05/2012 15:52:17 org.apache.catalina.util.LifecycleBase start
INFO: The start() method was called on component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/SignInAndGetIp]] after start() had already been called. The second call will be ignored.
java.io.FileNotFoundException: LoginHistory.dat (‏‏Access denied)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:70)
    at java.io.FileWriter.<init>(FileWriter.java:46)
    at signIn.SignInAndShowIPTableServlet.init(SignInAndShowIPTableServlet.java:60)
    at javax.servlet.GenericServlet.init(GenericServlet.java:160)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1228)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1147)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:836)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:304)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

It seems plain that you don't have permission to create that file where you're trying to create it, hence the "Access denied" message. 很明显,您没有权限在您尝试创建该文件时创建该文件,因此“拒绝访问”消息。 You'd need to find a directory where you're allowed to create files. 您需要找到允许您创建文件的目录。 If you're not sure where a file is going to be created, you can see its full path with File.getAbsolutePath() or File.getCanonicalPath() . 如果您不确定要在何处创建文件,可以使用File.getAbsolutePath()File.getCanonicalPath()查看其完整路径。

Workaround.解决方法。 ( Fedora linux ). (Fedora linux)。

If I create an empty file from a terminal window with touch command, FileWriter can then save it.如果我使用触摸命令从终端 window 创建一个空文件,则 FileWriter 可以保存它。 This proves that my user account has write access to create a new file in that location.这证明我的用户帐户具有在该位置创建新文件的写入权限。 Why can't FileWriter do that as the same user???为什么 FileWriter 不能像同一个用户那样做???

Previous comments do not explain this.以前的评论没有解释这一点。 This seem relatively new I've not seen this before.这似乎相对较新,我以前从未见过。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM