我是Java的新手,面临着审查文件的问题。 我有一个名为" FileOperation"使用" boom.txt" file(位置:" FileOperation / files / boom.txt")。我想要做的是从类#34; MyTextPanel"中访问该文件。 (位置:" FileOperation / MyTextPanel.java")。
我为此创建了2种方法。一个是通过getClass.getResource(path),另一个是通过给出文件的绝对位置。第二种方法有效,首先没有。有人请解释,第一种方法的问题是什么。这是MyTextPanel类:
package FileOperaton;
import java.awt.BorderLayout;
import java.io.FileReader;
import java.net.URL;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class MyTextPanel extends JPanel {
JTextArea textArea;
MyTextPanel()
{
setLayout(new BorderLayout());
textArea=new JTextArea();
add(textArea,BorderLayout.CENTER);
String fileName;
fileName=getFileName1();
//fileName=getFileName2();
System.out.println("File Name = "+fileName);
if(fileName!=null)
{
try {
FileReader fr=new FileReader(fileName);
System.out.println("Access Successful");
} catch (Exception e) {
e.printStackTrace();
}
}
}
private String getFileName1()
{
URL url=getClass().getResource("/files/boom.txt");
System.out.println("by getFileName1()");
if(url!=null)
return url.getFile();
return null;
}
private String getFileName2()
{
String absolutePath="E:\\Project Eclipse\\Workspace\\FileOperation\\src\\FileOperaton\\files\\boom.txt";
System.out.println("by getFileName2()");
return absolutePath;
}
}
以下是产出:
by getFileName1()
File Name =/E:/Project%20Eclipse/Workspace/FileOperation/bin/FileOperaton/files/boom.txt
java.io.FileNotFoundException: E:\Project%20Eclipse\Workspace\FileOperation\bin\FileOperaton\files\boom.txt (The system cannot find the path specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileReader.<init>(Unknown Source)
at FileOperaton.MyTextPanel.<init>(MyTextPanel.java:32)
at FileOperaton.MyFrame.<init>(MyFrame.java:22)
at FileOperaton.MyFrame.main(MyFrame.java:29)
通过第二种方法:
by getFileName2()
File Name = E:\Project Eclipse\Workspace\FileOperation\src\FileOperaton\files\boom.txt
Access Successful
我还在第一种方法中尝试了url = getClass()。getResource(&#34; /files/boom.txt")但是url被指定为null。 在第二种方法中,如果我使用absolutePath =&#34; E:\ Project Eclipse \ Workspace \ FileOperation \ bin \ FileOperaton \ files \ boom.txt&#34 ;; (bin而不是src)它也会获得成功。
答案 0 :(得分:0)
仔细阅读你的输出:
第一种方法:
E:\项目%20Eclipse \工作区\ FileOperation \ BIN \ FileOperaton \文件\ boom.txt
第二种方法:
E:\ Project Eclipse \ Workspace \ FileOperation \ src \ FileOperaton \ files \ boom.txt
有一次您将文件放在src
文件夹中,一次放在bin
文件夹中。
我建议制作第三个文件夹res
并将其存储在那里(E:\Project Eclipse\Workspace\FileOperation\res\boom.txt
)并加载它:
public static URL getFile (String filename)
{
return MyTextPanel.class.getClassLoader().getResource(filename);
}
答案 1 :(得分:0)
如果文件位于FileOperation包/文件夹中,我将采取以下措施:
YourClass.class.getResource("/FileOperation/boom.txt");
当您的文件位于FileOperation / files文件夹中时,您应该执行以下操作:
YourClass.class.getResource("/FileOperation/files/boom.txt");
此外,您可以查看bin文件夹以查看boom.txt是否存在。如果没有,可能使用F5刷新项目,因此文件/ boom.txt是项目的一部分。
答案 2 :(得分:0)
好吧,我找到了解决自己问题的方法。这可能对其他人有所帮助。使用&#34;文件名进行实验:&#34;输出我发现,getFile1()和getFile2()的返回实际上只有一个&#34; sapce&#34; charecter。那是&#34; ...项目%20Eclipse ......&#34; [由getFile1()返回]和#34; ...项目Eclipse ...&#34; [由getFile2返回( )]。所以,我编辑了getFile1()方法:
private String getFileName1()
{
URL url=getClass().getResource("files/boom.txt");
System.out.println("by getFileName1()");
if(url!=null)
return url.getFile().replaceAll("%20", " ");//<--- replace %20 by space charecter
return null;
}
最后它起作用了。如果有人知道,为什么url会生成%20的空格以及为什么这不起作用,那会更好。:)