![](/img/trans.png)
[英]java.io.FileNotFoundException even when the file path is correct
[英]java.io.FileNotFoundException when trying to create a file to a (probably) correct directory
嗨,我的问题是当我使用此功能时:
final File f = newFile(ButtonOneEvent.class.getProtectionDomain().getCodeSource().getLocation().getPath());
filePath = f.toString() + "/PlayerList.txt"; //Playerlist.txt being the file I want to create, filePath being an empty string.
System.out.println(f);
要为此定义类的本地目录:
FileOutputStream fout = new FileOutputStream(Start.filePath); //**Reference Point**
if(inputData != null) { //Ignore the if else statement
new PrintStream(fout).println("Text Stuff")
} else {
new PrintStream(fout).println("Text Stuff")
}
fout.close();
我想创建此文件时在“参考点”行上收到java.io.FileNotFoundException
,当然它还不存在。 此代码由JButton
激活。
顺便说一句, Sytem.out.println(f)
输出以下内容:
*/Users/HillFamily/Library/Application%20Support/Youth%20Digital/Software/Forge/mcp/eclipse/Football%20Card%20Sorter/bin* <- Directory
StackTrace:(很抱歉!)
java.io.FileNotFoundException: /Users/HillFamily/Library/Application%20Support/Youth%20Digital/Software/Forge/mcp/eclipse/Football%20Card%20Sorter/bin/PlayerList.txt (No such file or directory)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:194)
at java.io.FileOutputStream.<init>(FileOutputStream.java:84)
at events.ButtonOneEvent.actionPerformed(ButtonOneEvent.java:33)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6414)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3275)
at java.awt.Component.processEvent(Component.java:6179)
at java.awt.Container.processEvent(Container.java:2084)
at java.awt.Component.dispatchEventImpl(Component.java:4776)
at java.awt.Container.dispatchEventImpl(Container.java:2142)
at java.awt.Component.dispatchEvent(Component.java:4604)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4618)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4279)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4209)
at java.awt.Container.dispatchEventImpl(Container.java:2128)
at java.awt.Window.dispatchEventImpl(Window.java:2492)
at java.awt.Component.dispatchEvent(Component.java:4604)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:717)
at java.awt.EventQueue.access$400(EventQueue.java:82)
at java.awt.EventQueue$2.run(EventQueue.java:676)
at java.awt.EventQueue$2.run(EventQueue.java:674)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:86)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:690)
at java.awt.EventQueue$3.run(EventQueue.java:688)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:86)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:687)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
很有可能是因为您的Start.filePath
是目录(不是文件),无法创建或根本不存在。 另外, Start.filePath
依赖于系统,并且必须与您的平台兼容。 您需要确保这是正确的,并且您所指的位置具有足够的访问权限以进行写操作。 另一个问题,您的完整路径名如何得知您正在寻找/写入正确的位置? 路径上的某些目录确实存在吗?
要开始进行修复操作-您可能需要检查System.out.println(Start.filePath)
打印出有意义的内容。 如果您在空格和URL编码方面遇到问题(例如,%20是ASCII中的空白),则需要在问题上下文中开始考虑它们。
作为示例(从Windows的角度来看),请参见以下内容:
public static void main(String[] args) {
try{
FileOutputStream fos = new FileOutputStream("C:/myjavaprojects/folder%20with%20a%20space/haha.txt");
// This is unchecked exception - we have to rethrow/catchprocess it
BufferedOutputStream bos = new BufferedOutputStream(fos);
bos.write("Writing to file".getBytes());
bos.flush();
bos.close();
} catch (FileNotFoundException fnfe){
try{
FileOutputStream fos = new FileOutputStream("C:/myjavaprojects/folder with a space/haha.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
bos.write("Writing to file".getBytes());
bos.flush();
bos.close();
} catch(FileNotFoundException e){
e.printStackTrace();
} catch (IOException ioe){
ioe.printStackTrace();
}
} catch (IOException ioe){
ioe.printStackTrace();
}
}
}
首先:查看此方法“ newFile”,也许您必须更改为适当的File调用:
文件f =新文件(mypath +“ PlayerList.txt”);
其次,尝试查看您的类成员'filePath'是否未更改(Start类的成员)。
如果要创建一个OutputStream写入文件,请使用:
如果文件不存在,还将创建文件。
try {
Path p = Paths.get("demo", "test.txt");
Files.createDirectories(p.getParent());
DataOutputStream out = new DataOutputStream(Files.newOutputStream(p, StandardOpenOption.CREATE, StandardOpenOption.WRITE));
out.writeBytes("Hello-World!!");
out.flush();
out.close();
} catch (IOException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.