我有以下方法读取文件,其中 ID (int)和内容(字符串)由制表符分隔。我的方法逐行读取文件,并使用制表符分隔符,将 ID 和字符串解析为双向链接列表,如下所示:
knex('item').update({
qtyonhand: knex.raw('?? + 1', ['qtyonhand'])
}).where('rowid',8)
当我运行它时,此方法在 Eclipse 中完美运行,但在使用 javac 并在终端中运行时,会出现此错误:
void readAndAssemble(String fileName)
{
Scanner sc;
try
{
sc = new Scanner(new File(fileName));
while (sc.hasNextLine())
{
String line = sc.nextLine();
String lines[] = line.split("\t");
int packetID = Integer.parseInt(lines[0]);
// -----------------------------------------
String packetContent = lines[1]; // gives error in terminal
// -----------------------------------------
DLLNode curr = header.getNext();
DLLNode prev = header;
while (packetID > curr.getPacketID())
{
prev = curr;
curr = curr.getNext();
}
DLLNode newNode = new DLLNode(packetID, packetContent, prev, curr);
prev.setNext(newNode);
curr.setPrev(newNode);
}
sc.close();
} catch (FileNotFoundException e)
{
System.out.println("File does not exist");
}
}
我的MessageAssembler类看起来像这样:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at DLL.readAndAssemble(DLL.java:40)
at MessageAssembler.main(MessageAssembler.java:11)
导致这种情况的原因是什么?
答案 0 :(得分:1)
您的文件中的行似乎与您的理解不符。
尝试做
String lines[] = line.split("\t");
if (lines.length < 2) {
System.err.println ("error with line " + line);
continue;
}
在unix
文件
试
FileInputStream fstream = new FileInputStream("c:/temp/a.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String line;
//Read File Line By Line
while ((line = br.readLine()) != null) {
// Print the content on the console
System.out.println (line);
String [] lines = line.split ("\t");
if (lines.length < 2) {
System.err.println ("error with line " + line);
continue;
}
}
//Close the input stream
br.close();