从.txt文件读取和存储数据到数组的问题

时间:2015-05-12 20:13:46

标签: java arrays string loops double

程序:

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

    以上就是我想要实现的目标;但是,该程序无法正常工作。 *请看下面的例子......

    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)
    

2 个答案:

答案 0 :(得分:2)

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

所以当你有:

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

在这里,我认为你实际上并不需要一个StringBuffer,所有你需要添加/替换的是这个

    String str;
    str = bufferedReader.readLine();

如果你想阅读整个文件,你只需要使用readLine()遍历整个文件。

答案 1 :(得分:1)

正如GiantTree所说,你实际上并没有在文件中阅读

将newString的定义更改为以下内容将为您提供一些进展。

  String newString = bufferedReader.readLine();

您应该考虑的其他事项:

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