我正在阅读一个非常简单的文件,显示项目和费用。它看起来像这样:
Shoes 10.00
Jersey 20.00
Cookies 15.00
Light Bulbs 2.00
Paper 5.00
我想将每个项目映射到它的成本和我当前的代码工作得很好。但是,它看起来有点笨重并初始化变量为null,我的项目的提交服务器不喜欢并将其视为错误。我正在寻找一种方法将其转换为更优雅的东西,从而学习除了依赖Scanner类之外的其他方式读取文件。也许使用BufferedReader或PrintReader或类似的东西,我从来没有真正掌握过。帮助赞赏。
private TreeMap<String, Double> prices = new TreeMap<String, Double>();
public void readFromFile(String fileName){
File file = new File(fileName);
Scanner sc = null; //Server treats this as a bug.
try {
sc = new Scanner(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
while (sc.hasNextLine()) {
Scanner sc2 = new Scanner(sc.nextLine());
while (sc2.hasNext()) {
String s = sc2.next(); //Gets the item name
prices.put(s, Double.parseDouble(sc2.next())); //The next word is the price
}
sc2.close();
}
}
答案 0 :(得分:2)
这是一个例子。抛出异常而不是在方法内处理它们。 BufferedReader
和StringTokenizer
用于从文件中获取所需的文字。
private TreeMap<String, Double> prices = new TreeMap<String, Double>();
public void readFromFile(String fileName) throws FileNotFoundException, IOException {
BufferedReader br = new BufferedReader(new FileReader(fileName));
StringTokenizer st;
String line;
while ((line = br.readLine()) != null) {
st = new StringTokenizer(line.trim(), " ");
prices.put(st.nextToken(), Double.parseDouble(st.nextToken()));
}
br.close();
}
如果fileName
为null
,则会自动抛出NullPointerException
。如果您想通过您的方法处理它,您可以在方法的顶部添加以下代码..
if (fileName == null) {
throw new IllegalArgumentException("Invalid String input for fileName. fileName: " + fileName);
}
答案 1 :(得分:0)
您可以使用try
进行异常处理,而不是使用catch
,throws
语句。
public void readFromFile(String fileName) throws FileNotFoundException {
File file = new File(fileName);
Scanner sc = new Scanner(file);
...
}
这应解决您的服务器将null
分配视为错误的问题。