我有一个简单的文本文件,内容如下:
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;
}
}
由于数组的类型,它一直给我一个数组。
答案 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)
尝试下面的一个完整示例:
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
,这是不可能的,因为类型double
和ArrayList
不同。
如果要使用双精度数组列表,请使用
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();
}
}
将打印文件中所有成功解析的数字。