【问题标题】:Why FileWriter doesn't create a new file?为什么 FileWriter 不创建新文件?
【发布时间】:2012-05-26 14:34:45
【问题描述】:

考虑以下代码:

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

知道为什么我找不到任何名为 LoginHistory.dat 的文件吗?
谢谢

更新:我刚刚发现行后出现异常:

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

其详细信息是:
任何想法真正的问题是什么?

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)

【问题讨论】:

  • 您在哪里寻找您的数据文件?
  • 这是一个在 NetBeans 上生成的 java web 应用,所以我检查了所有的项目目录和子目录
  • 我适合没有通过一些异常,它已经生成了文件。你可能看错地方了。尝试给出绝对路径。
  • 在关闭 m_Writer 之前尝试调用m_Writer.flush()
  • 除非您指定路径,否则将在 IDE 的工作空间路径下创建文件。检查那个文件夹。

标签: java tomcat tomcat7 filewriter printwriter


【解决方案1】:

您似乎没有权限在您尝试创建该文件的位置创建该文件,因此出现“访问被拒绝”消息。您需要找到一个允许您创建文件的目录。如果您不确定要在哪里创建文件,可以使用File.getAbsolutePath()File.getCanonicalPath() 查看其完整路径。

【讨论】:

  • 感谢您的评论,但我真的不知道为什么我不允许在自己的硬盘上创建文件,这有点奇怪。
  • 我也试过你说的,但不幸的是我在 PrintWriter 和 FileWriter 中都没有你之前提到的任何方法(这些类不是从 File 类扩展的)
  • 这叫做“安全”。现代操作系统限制了普通用户写入文件的权限。不,FileWriter 不是文件,因此您需要 create a new File 并调用该方法。 FileWriter 也有a constructor that accepts a File object,所以如果你愿意,你也可以使用它。否则,只需找出允许您创建文件的位置并将路径指向那里。
猜你喜欢
  • 2014-10-07
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
  • 2017-12-28
  • 1970-01-01
  • 2013-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多