使用“双精度”方法将文本文件读取到Java中

时间:2018-10-27 12:51:12

标签: java file java-8

我有一个简单的文本文件,内容如下:

4 5 2 7

我希望Java读取此文件并使用它创建一个数组。但是,我希望使用我的方法来保留其“双精度”属性。我很难让我的数组命令来解决它:

import java.util.*; 
import java.nio.charset.StandardCharsets; 
import java.nio.file.*; 
import java.io.*; 

public class ReadFile {
    public static void main(String[] args){
        gns(Arr);
    }
    public static double gns(String TxtFile) throws IOException {
        Path path = Paths.get("C:\\Users\\me\\files\\inputfiles");
        int numLines = (int)Files.lines(path).count();
        Scanner fileScanner = new Scanner(new FileReader("TxtFile.txt"));
        double Arr = new ArrayList<String>();
        return Arr;
        }
}

由于数组的类型,它一直给我一个数组。

4 个答案:

答案 0 :(得分:1)

这可以解决问题:

double[] arr = Files.lines(Paths.get(PATH))
                    .flatMap(line -> Arrays.stream(line.split(" ")))
                    .mapToDouble(Double::parseDouble)
                    .toArray();

在这里,我们逐行读取文件,然后使用" "对其进行拆分,解析每个数字并将其秘密转换为double的数组。然后,您可以从方法arr[]返回gns(String TxtFile)

答案 1 :(得分:1)

Scanner#nextDouble

尝试下面的一个完整示例:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;

public class NextDouble {
  public static void main(String[] args) throws FileNotFoundException {
    Scanner sc = new Scanner(new File("input.txt"));
    List<Double> doubles = new ArrayList<Double>();
    while (sc.hasNextDouble()) {
      doubles.add(sc.nextDouble());
    }

    System.out.println(doubles); // => [1.0, 3.0, 8.0, 6.0, 5.0]

  }
}

input.txt包含以下行:

1 3 8 6 5

您可以在doc

中找到有关扫描仪的更多信息

答案 2 :(得分:0)

您正试图将Arr类型的double设置为ArrayList类型的String,这是不可能的,因为类型doubleArrayList不同。

如果要使用双精度数组列表,请使用

ArrayList<Double> d = new ArrayList<>();

答案 3 :(得分:-1)

文本文件中的每个元素都需要解析为double,因此您必须为每个元素使用try/catch。 您的方法gns()应该返回数组,所以double[]而不是double

public static double[] gns(String txtFile) throws IOException {
    File f = new File(txtFile);
    Scanner fileScanner = new Scanner(f);

    ArrayList<Double> list = new ArrayList<Double>();
    String line = "";

    while (fileScanner.hasNext()) {
        line = fileScanner.nextLine();
        String[] splitted = line.split(" ");

        for (String num : splitted) {
            try {
                list.add(Double.parseDouble(num.trim()));
            } catch (NumberFormatException e) {
                System.out.println(num + " " + "can't be parsed");    
            }
        }
    }

    double[] result = new double[0];

    if (list.size() > 0) {
        result = new double[list.size()];
        for (int i = 0; i < list.size(); i++)
            result[i] = list.get(i);
    }

    return result;
}


public static void main(String[] args) {
    try {
        double[] array = gns("c:\\filename.txt");

        for (double d : array)
            System.out.println(d);

    } catch (IOException e) {
        e.printStackTrace();
    }
}

将打印文件中所有成功解析的数字。