将 .txt 文件中的数据读取和存储到数组中时出现问题

Issue with reading and storing data from .txt file into array

计划:

  1. 用户输入包含数字的文件名(每行 1 个)
  2. 读取文件并将数据存入StringBuffer
  3. StringBuffer转String类型
  4. String 是 split() 并存储在 String[]
  5. Double[] 已创建,并且 String[]
  6. 的 converts/stores 个元素

以上是我想要实现的;但是,该程序不起作用。 *看下面的例子...

class tester
{
public static int x = 0;
public static double[] dataArray = new double[x];//array storing elements

public static void main(String[] args) throws IOException
{
    //userInput .txt
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter filename:\n");
    String name = sc.nextLine();

    File file = new File(name);
    FileReader fileReader = new FileReader(file);
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    StringBuffer stringBuffer = new StringBuffer();
    String newString = stringBuffer.toString();

    String [] stringArray = newString.split("\n");
    double [] dataArray = new double[stringArray.length];

    for(int i=0 ; i < stringArray.length ; i++)
    {  
        dataArray[i] = Double.parseDouble(stringArray[i]);  
    }

我有一个名为:Ben.txt 的文件,看起来像这样:

1
2
3
4
5
6
7
8
9
10

当我运行程序...

Enter filename:

c:/Ben.txt
Exception in thread "main" java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
at tester.main(tester.java:27)

正如 GiantTree 所说,您实际上根本没有在读取文件

将 newString 的定义更改为以下内容会给您带来一些进步。

  String newString = bufferedReader.readLine();

您应该考虑的其他事项:

  • 关闭您打开的资源
  • 异常处理
  • 遵循标准 class 命名约定
  • 不需要初始化dataArray两次

问题是您实际上没有从文件中读取任何内容。您完成了所有设置,但没有阅读。

所以当你有:

    File file = new File(name);
    FileReader fileReader = new FileReader(file);
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    StringBuffer stringBuffer = new StringBuffer();
    String newString = stringBuffer.toString();

这里我不认为你真的需要一个StringBuffer,你所需要的add/replace就是这个

    String str;
    str = bufferedReader.readLine();

如果你想读取整个文件,你所要做的就是使用 readLine() 遍历整个文件。