从读取文件类中获取两个变量,而不重复代码



我创建了一个名为 ReadFile 的类,用于将数据(元素的数量和数量(从多个文件加载到 2 个 arraylist 中,以存储元素数量的两个数量。如何在不重复读取文件代码的情况下获得元素数 4 和以下数字?

示例输入文件

1 10 9 8

public class ReadFile {

   public List <Integer> getNumbers(){
        List<Integer> numbers = new ArrayList<>();
        File folder = new File("/Users/Mary/NetBeansProjects/Sample/src/program/pkg4/Input");
        for (File file : folder.listFiles()) {
            try{
                FileReader fileReader = new FileReader(file);
                BufferedReader reader = new BufferedReader(fileReader);
                String numberOfElement = reader.readLine();
                String line = reader.readLine();                  
                for (String s : line.split("\s+")) {                        
                    numbers.add(Integer.parseInt(s));
                }
                reader.close(); 
            }catch(IOException e){
                System.out.println("ERROR: There was a problem reading the file.n" + e.getMessage());
            }  
        }    
        return numbers;
    }      
    public List <Integer> getElements(){
        List<Integer> elements = new ArrayList<>();
        File folder = new File("/Users/Mary/NetBeansProjects/Sample/src/program/pkg4/Input");
        for (File file : folder.listFiles()) {
            try{
                FileReader fileReader = new FileReader(file);
                BufferedReader reader = new BufferedReader(fileReader);
                String numberOfElement = reader.readLine();                       
                elements.add(Integer.parseInt(numberOfElement));
                reader.close(); 
            }catch(IOException e){
                System.out.println("ERROR: There was a problem reading the file.n" + e.getMessage());
            }  
        }    
        return elements;
    }  

}
你可以

按照Heindl建议@jonathan做(将整个fie读成一个字符串(,或者你至少可以将阅读器的创建移动到两个方法之外:

public void parseFile()) {
   File folder = ...;
   for (File file : folder.listFiles()) {
      try {
         // create reader for this file
         ...
         int number = getNumber(reader);
         List<Integer> = getElements(reader, number);
      } catch( ... ) {
         ...
      }
   }
}

您甚至可能希望将元素列表放在以文件名为键的映射中。从您的评论中不清楚单个文件中是否有多个列表,因此您可能需要执行其他操作来处理这种情况。

最新更新