Чтение текстового файла в Java с использованием «двойного» метода - PullRequest
0 голосов
/ 27 октября 2018

У меня есть простой текстовый файл со следующим содержимым:

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 голосов
/ 27 октября 2018

Сканер # 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

0 голосов
/ 27 октября 2018

Это бы сработало:

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

Здесь мы читаем файл построчно, а затем разбиваем его, используя " ", анализируем каждое число и преобразуем его в массив double. Затем вы можете вернуть arr[] из вашего метода gns(String TxtFile).

0 голосов
/ 27 октября 2018

Каждый элемент из текстового файла должен быть проанализирован до 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();
    }
}

будет печатать все успешно проанализированные числа из файла.

0 голосов
/ 27 октября 2018

Вы пытаетесь установить для Arr типа double значение ArrayList типа String, это невозможно, поскольку типы double и ArrayList отличаются.

Если вам нужен массив двойников, используйте

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