行数等于名称数

时间:2015-09-06 08:35:41

标签: java file-handling

如果有人可以帮助我请在java程序中,我有一个名为“input.txt”的文件,其中包含

等文字
Agent1 R F 2 0
Agent2 R B 4 5
Agent4 C E 2 2
Agent3 R F 3 11

我想将所有行保存在不同的变量中并对它们进行操作。 在这里说我想将第一行保存到字符串中,我将其称为line1,第二行我将保存在名为line2第三行的字符串中,我将保存在名为line3的字符串上,依此类推。

是他们的任何方式。我的txt文件可以有任意数量的行,我想保存这些行,因为字符串可以对它们起作用。

简单地说,我需要一个像循环这样的东西来继续改变变量的名称。但我不知道该怎么做。

这是我的代码,直到现在,但我想要将行保存为任何数据类型的字符串

而不是输出

任何帮助都非常感激。

2 个答案:

答案 0 :(得分:1)

试试这个。

public static Map<String, String> loadFile(Reader reader)
        throws IllegalArgumentException{
    Map<String, String> mapList = new TreeMap<String, String>();
    if(reader == null)
    {
        throw new IllegalArgumentException("Reader not valid");
    }
    String line;
    innerReader = new BufferedReader(reader);
    int countLine = 0;
    try
    {
    while((line = innerReader.readLine()) != null)
    {
        if (line == null || line.trim().isEmpty())
            throw new IllegalArgumentException(
                    "Line Empty");
        mapList.put("line"+String.valueOf(countLine), line);
        countLine++;
    }
    } catch (IOException e) {
    }
    return mapList;
}

在主要添加此内容以尝试您的代码。

Map<String, String> mapList = new TreeMap<String, String>(Collections.reverseOrder());
    try {
        mapList = loadFile(new FileReader("YourFile.txt"));
    } catch (IOException e) {
        e.printStackTrace();
    }
    for (Map.Entry entry : mapList.entrySet()) {
        System.out.println(entry.getKey() + ", " + entry.getValue());

}

安这是输出。

  

line0,Agent1 R F 2 0

     

line1,Agent2 R B 4 5

     

line2,Agent4 C E 2 2

     

第3行,Agent3 R F 3 11

要在文件中打印,请添加:

private static PrintWriter innerWriter;
public static void printMap(Map<String, String> myMap, Writer writer)
            throws IOException {
        if(writer == null)
        {
            throw new IOException("Cannot open file");
        }
        innerWriter = new PrintWriter(writer);
        for (Map.Entry entry : myMap.entrySet()) {
            innerWriter.write(entry.getKey() + ", " + entry.getValue() + "\n");

         //OR THIS FOR ONLY VALUES
         // innerWriter.write(entry.getValue() + "\n");

        }
        innerWriter.close();
    }

这是主要的

try {
        printMap(mapList, new FileWriter("FileOutput.txt"));
    } catch (IOException e) {
        e.printStackTrace();
    }

答案 1 :(得分:1)

您不能像在刚才更改名称时那样创建变量。您可以使用List存储文件中的数据并在以后处理。

File file = new File("input.txt");
Scanner scanner = new Scanner(file);
List<String> names = new ArrayList<String>();
while (scanner.hasNext()) {
  String line = scanner.nextLine();
  names.add(line);
}
// Now all the lines from the file are stored in the list.
// You can do the processing you need to do.

List的{​​{1}}转换为Strings数组,并使用String方法对数组进行排序。我们将提供自定义Arrays.sort以根据我们的需要对数组进行排序。

Comparator

这里假设线条总是包含五个元素,我们按行中的第四个位置编号排序。

<强>输出:

String nameArray[] = names.toArray(new String[names.size()]);
Arrays.sort(nameArray, new Comparator<String>() {
  @Override
  public int compare(String o1, String o2) {
    String array1[] = o1.split(" ");
    String array2[] = o2.split(" ");
    return array1[3].compareTo(array2[3]);
  }
});