用java中的文件运行程序

时间:2014-09-28 21:51:38

标签: java

好的,我正在为我的AI课做作业,我给出了下面列出的代码。我需要做的就是稍微修改它,但除此之外,我可以做到这一点。我需要帮助的是我被告知我必须使用如下文件的输入来运行程序:ReflexRover< <文件名>

当我运行程序时,我可以给它默认构造函数接受的个别数字,一切都很好。但当我给它一个文件名时,它说无法打开。我不知道如何使用eclipse,所以有一种特殊的方式我应该运行程序将文件发送给它吗?

注意:代码本身没有问题

  import java.io.*;
  import java.lang.*;

  /**
  * RovingSampleSensors: A class for reading sample perceptions from a file
  * and presenting them one at a time
   *
   * @author 
    * @version 1.1
   *
  * allowed stdin version of contstructor
   */

  public class RoverSampleSensor {
// File
private BufferedReader myFile;


/**
 * Creates Sensors object from file
 * @param filename The file that data is read from
 */
public RoverSampleSensor(String filename) {
try {
    myFile=new BufferedReader(new FileReader(filename));
} catch (Exception e) {
    System.err.println("Ooops!  I can't seem to load the file \""+filename+"\", do you have the file in the correct place?");
    System.exit(1);
}
}

/**
 * Creates Sensors object from standard input
 */
public RoverSampleSensor() {
try {
    myFile=new BufferedReader(new InputStreamReader(System.in));
} catch (Exception e) {
    System.err.println("Ooops!  I can't seem to read from the standard input!");
    System.exit(1);
}
}

/**
 * Gets the next sample perception
 * @return SamplePercept A SamplePercept object containing the percept
 */

public SamplePercept getPercept() {
String line;

try {
    line=myFile.readLine();
    if (myFile==null) {
    return null;
    } else if (line==null) {
    try {
        myFile.close();
    } catch (Exception e) {
    }

    myFile=null;
    return null;
    } else {
    return new SamplePercept(line);
    }
} catch (Exception e) {
    System.err.println("Ooops!  I seem to have gotten an i/o error reading the file.");
    System.exit(1);
}
return null;
}

/**
 * Run a test of the reading routines, prints out all percepts of the file
 *
 * Usage: java RoverSampleSensor -file <filename>
 */

public static void main(String args[]) {
if (args.length!= 0 && 
    (args.length != 2 ||   (! args[0].equals("-file")))) {
    System.err.println("Usage: RoverSampleSensor -file <filename>");
    System.exit(1);
}
RoverSampleSensor rss=null;
SamplePercept sp;

if (args.length==0) {
    rss=new RoverSampleSensor();
} else {
    rss=new RoverSampleSensor(args[1]);
}
while((sp=rss.getPercept())!=null) {
    System.out.println("Percept: "+sp.value());
}
}

}

好的,请允许我改进我的问题。这就是我做的:我点击运行,控制台弹出,我可以逐个输入整数没问题。我只需要知道当我做RoverSampleSensor时如何让程序工作。该文件已经与我的src处于同一级别。每次我尝试它都会抓住我的异常并说#34;&#34;哎呀!我似乎在读取文件&#34;时出现了i / o错误。我无法打印堆栈跟踪,因为我不应该更改代码的这一部分。在尝试将文件发送之前,我不应该打跑吗?我应该以不同的方式运行它吗?

1 个答案:

答案 0 :(得分:0)

如果您在Eclipse下工作并且不打算在jar文件中导出项目,一个简单的解决方案是将您的文件放在项目的根目录(在文件夹src的同一级别)。如果这样做,文件的路径将只包含其名称。

如果使用控制台命令启动程序,则必须根据控制台中的当前文件夹提供文件的路径。