我看到了一些类似的问题,但我的情况有点不同。
我定义了一个
Map<Integer, ArrayList<Double>> fl;
我的输入.txt文件:
1 0.56 0.57 0.73 ..
2 2.3 3.50 ......
9 4.98 0.99 ..
如何将文件读入地图fl?
谢谢!
答案 0 :(得分:2)
使用Scanner
并首先调用Scanner.readInt()
,它将为您提供第一个整数。
然后调用Scanner.readLine()
,它将为行中的所有剩余双精度字符串提供。拆分它并将所有内容解析为双倍。
重复相同的操作直到文件结束。
答案 1 :(得分:1)
这是一个尝试。 我编译并运行了代码。
如果您使用IDE,请确保输入文件与项目位于同一目录中.--这仅适用于您未修改以下路径的情况。
package fileread;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
public class FileRead {
private static HashMap<Integer, ArrayList<Double>> map = new HashMap<>();
private static BufferedReader reader;
public static void main(String[] args) {
try
{
reader = new BufferedReader(new FileReader("input"));
//or reader = new BufferedReader(new FileReader("C:\\full-path-to-your-file));
String line;
while((line = reader.readLine()) != null)
{
String[] tokens = line.split(" ");
Integer i;
Double d;
ArrayList<Double> list = new ArrayList<>();
i = Integer.valueOf(tokens[0]);
for(int j = 1; j < tokens.length; j++)
list.add(Double.valueOf(tokens[j]));
map.put(i, list);
}
}catch(IOException ex)
{
//break execution
}finally
{
if(reader != null)
try
{
reader.close();
}catch (IOException ex) {
//don't break :)
}
}
for(Integer i : map.keySet())
{
ArrayList<Double> l = map.get(i);
System.out.print("Line " + i + ": ");
for(Double d: l)
System.out.print(d + " ");
System.out.println();
}
}
}
答案 2 :(得分:1)
解析文件和填充地图的代码应如下所示
try {
BufferedReader bReader = new BufferedReader(new FileReader(new File("c:/input .txt")));
String line = "";
Map<Integer, ArrayList<Double>> fl = new HashMap<Integer, ArrayList<Double>>();
while ((line = bReader.readLine()) != null) {
String[] strArray = line.split(" ");
for (int i=0;i<strArray.length;i++) {
ArrayList<Double> value = new ArrayList<Double>();
int key=0;
if(i==0){
key =Integer.valueOf(strArray[0]);
}
else{
value.add(Double.valueOf(strArray[i]));
}
fl.put(key, value);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}