我正在尝试逐行读取文件并将其保存到字节数组中,但由于某种原因,String.getBytes()会抛出Nullpointer异常。
我做错了什么?
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
byte[][] bytes = null;
try {
String data;
int i = 0;
while((data = br.readLine()) != null) {
bytes[i] = data.getBytes(); // THROWS A NULLPOINTER EXCEPTION HERE
i++;
}
System.out.println(bytes.length);
} catch (IOException e)
e.printStackTrace();
}
}
答案 0 :(得分:2)
您的字节数组bytes
为空。为什么不使用ArrayList
?
ArrayList<byte[]> bytes = new ArrayList<>();
然后在你的代码中:
bytes.add(data.getBytes());
答案 1 :(得分:1)
当您尝试分配bytes
null
时,问题是byte[][] bytes = new bytes[N][];
(您从未实例化过它!)。试试这个:
bytes
在填充之前,您必须在N
矩阵中指定至少行数。我不知道byte[][]
的价值应该是什么,如果在循环开始时它未知,那么我们就不能使用{{1}用于存储结果 - 在这种情况下,需要一个可变长度的数据结构,例如ArrayList<byte[]>
可以解决这个问题:
String data;
List<byte[]> bytes = new ArrayList<byte[]>();
while ((data = br.readLine()) != null) { // we don't need `i` for anything
bytes.add(data.getBytes());
}
System.out.println(bytes.size()); // this prints the number of rows
答案 2 :(得分:1)
这是因为您从未将bytes
初始化为除null
之外的任何内容:
byte[][] bytes = null;