将此自定义readDataFile函数拉入Eclipse以将.dat文件数据打印到控制台

时间:2014-02-27 19:28:09

标签: java-io datainputstream

目标:从.dat文件中获取数据并将其打印到Eclipse中的控制台

资源fpfret.javaPointF.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中的项目视图:

enter image description here

1 个答案:

答案 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应该优雅地为您处理此问题。