目标:从.dat文件中获取数据并将其打印到Eclipse中的控制台
资源:fpfret.java和PointF.java以及dichromatic.dat
我已经解决了所有问题并且只有一些控制台错误,这是我的代码,我的问题是:如何添加 getCodeBase() 方法?
package frp3;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.EOFException;
import java.net.URL;
import java.util.Vector;
public class FileRead {
public static void main(String[] args) { //getDocumentBase
System.out.println(readDataFile(getCodeBase() + "dichromatic.dat", 300, 750));
}
private static String getCodeBase() {
// TODO Auto-generated method stub
return null;
}
@SuppressWarnings("unchecked")
private static PointF[] readDataFile(String filename, int min, int max) {
@SuppressWarnings("rawtypes")
Vector v = new Vector();
try {
DataInputStream dis = new DataInputStream(new BufferedInputStream((new URL(filename)).openStream()));
float f0, f1;
while (true) {
try {
f0 = dis.readFloat();
f1 = dis.readFloat();
if (min < 0 || max < 0 || (f0 >= min && f0 <= max)) {
v.addElement(new PointF(f0, f1));
}
}
catch (EOFException eof) {
break;
}
}
}
catch (Exception e) {
e.printStackTrace();
}
PointF[] array = new PointF[v.size()];
for (int i = 0; i < v.size(); i++) {
array[i] = (PointF) v.elementAt(i);
}
return array;
}
}
这是我的控制台错误:
java.net.MalformedURLException: no protocol: nulldichromatic.dat
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at frp3.FileRead.readDataFile(FileRead.java:27)
at frp3.FileRead.main(FileRead.java:12)
[Lfrp3.PointF;@29be513c
这是我在Eclipse中的项目视图:
答案 0 :(得分:2)
好的。这实际上比我在第一次通过时想的更复杂。基本上,readDataFile期望dichromatic.dat文件是Internet上可用的资源。请查看readDataFile中的以下行:
DataInputStream dis = new DataInputStream(new BufferedInputStream((new URL(filename)).openStream()));
基本上,无论传入什么文件名,都会被用作URL。对于您的文件托管在本地文件系统上的用例,我建议您进行一些更改。
首先,将上面的DataInputStream声明行替换为:
DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(filename)));
其次,将getCodeBase替换为:
private static String getCodeBase() {
return "";
}
我只是用空字符串替换null。由于“dichromatic.dat”位于项目的根目录中,因此使用空字符串(表示项目根目录)作为getCodeBase()的结果就足够了,因为该函数的结果预先设置为“二色”。 dat“在作为filename
传递给readDataFile之前。
如果您将dichromatic.dat放在不同的位置,只需将该空字符串修改为指向该文件的“路径”。
希望这有帮助。
忘记提及 - 请务必更新您的导入列表以包含import java.io.FileInputStream
- 尽管Eclipse应该优雅地为您处理此问题。