好的,我正在为我的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错误。我无法打印堆栈跟踪,因为我不应该更改代码的这一部分。在尝试将文件发送之前,我不应该打跑吗?我应该以不同的方式运行它吗?
答案 0 :(得分:0)
如果您在Eclipse下工作并且不打算在jar文件中导出项目,一个简单的解决方案是将您的文件放在项目的根目录(在文件夹src的同一级别)。如果这样做,文件的路径将只包含其名称。
如果使用控制台命令启动程序,则必须根据控制台中的当前文件夹提供文件的路径。