我知道这里有很多关于阅读文本文件的问题,但是我已经完成了所有这些问题,而且我认为我在语法或SOMETHING方面遇到了一些困难,因为我一直在尝试的一切都在工作一点都不。
我试图做的是:
1) read a text file inputed by user
2) copy each individual line into an array, so each line is its own element in the array
我觉得我非常接近,但由于某种原因,我无法弄明白如何让它发挥作用!
以下是我现在的相关代码:
我在三个已经标记过的地方不断出现例外情况。
一直在研究这个问题,不知道下一步该做什么!有任何想法吗?
import java.io.IOException;
import java.util.Scanner;
public class FindWords {
public static void main (String args[]) throws IOException{
FindWords d = new Dictionary();
((Dictionary) d).dictionary(); //********* out of bounds here
}
/**
* Validates and returns the dictionary inputed by the user.
*
* @param
* @return the location of the dictionary
*/
public static String getDict(){
///////////////////ASK FOR DICTIONARY////////////////////
System.out.println("Please input your dictionary file");
//initiate input scanner
Scanner in = new Scanner(System.in);
// input by user
String dictionary = in.nextLine();
System.out.println("Sys.print: " + dictionary);
//make sure there is a dictionary file
if (dictionary.length() == 0){
throw new IllegalArgumentException("You must enter a dictionary");
}
else return dictionary;
}
}
调用类Dictionary:
import java.io.*;
public class Dictionary extends FindWords{
public void dictionary () throws IOException{
String dict = getDict();
String[] a = readFile(dict); //********** out of bounds here
int i = 0;
while(a[i] != null){
System.out.println(a[i]);
i++;
}
}
public static String[] readFile(String input) throws IOException{
//read file
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(input)));
System.out.println ();
int count = 0;
String[] array = new String[count];
try{
while (br.readLine() != null){
array[count] = br.readLine(); //********out of bounds here
count++;
}
br.close();
}
catch (IOException e){
}
return array;
}
}
谢谢你的期待!
编辑:只是fyi:我在父项目文件夹中有我的.txt文件。
答案 0 :(得分:4)
你试过这个吗?:
List<String> lines = Files.readAllLines(Paths.get("/path/to/my/file.txt"));
然后根据需要将列表转换为数组:
String[] myLines = lines.toArray(new String[lines.size()]);
答案 1 :(得分:1)
您正在初始化零长度数组,因此在第一次迭代时出现异常:
int count = 0;
String[] array = new String[count];
由于您可能不知道预期的尺寸,请改为使用List
:
List<String> list = new ArrayList<>();
String thisLine = null;
try{
while ((thisLine = br.readLine()) != null) {
list.add(thisLine);
}
}
您可以通过以下方式获得总大小:
list.size();
甚至更好,请使用morganos解决方案并使用Files.readAllLines()
。
答案 2 :(得分:1)
您从数组大小为零开始......
int count = 0;
String[] array = new String[count];
答案 3 :(得分:1)
这里有几个问题:
while
循环中,您正在拨打br.readLine()
两次电话,所以基本上您正在跳过2行中的一行。