从文件而不是从控制台读取

时间:2014-04-22 15:41:16

标签: java file-io

我正在抛出异常,我认为必须在子字符串中使用ArrayIndexOutOfBounds,并且您认为以下方法可用于在解析后将数据传递给我的数组

我想在每行上从这样的txt文件中读取它:

  1
  0
  1
  0
  0
  1
  0

每行一个整数!!

String fileName = "input.txt";
File file = new File(fileName);
Scanner scanner = new Scanner(file);

while(scanner.hasNextLine()){
    data1 = scanner.nextLine();

}
for ( int i = 0; i < data1.length(); i++)
{
    covertDataArray[i] = Byte.parseByte(data1.substring( i, i+1));
}

这是以前的工作版本,但它从控制台读取。它会在哪里:1010101001

System.out.println("Enter the binary bits");

data1 = in.next();


for ( int i = 0; i < data1.length(); i++)
{
    covertDataArray[i] = Byte.parseByte(data1.substring( i, i+1));
}

1 个答案:

答案 0 :(得分:1)

您正在阅读所有行,只保留data1变量中的最后一行。这可能是你的问题。

相反,您应该在阅读文件时立即处理每个值,并构建ArrayList而不是数组(因为您事先不知道它的大小):

String fileName = "input.txt";
File file = new File(fileName);
Scanner scanner = new Scanner(file);

ArrayList<Byte> covertDataList= new ArrayList<>();
while(scanner.hasNextLine()){
    String line = scanner.nextLine(); // the line should be just a number
    covertDataList.add(Byte.parseByte(line)); // no substring needed
}

如果您希望在文件格式错误时失败,则可以parseByte / try阻止catch

关于ArrayList

如果您想将列表用作数组,您可以:

  • 使用covertDataList.get(i)代替covertDataArray[i]
  • 使用covertDataList.set(i, value);代替covertDataArray[i] = value;

如果你真的需要一个阵列(我不明白这里的意思),你可以这样做:

Byte[] covertDataArray = covertDataList.toArray(new Byte[list.size()]);