如何从输入文件中一次读取两行并将它们添加到对象中?

Posted

技术标签:

【中文标题】如何从输入文件中一次读取两行并将它们添加到对象中?【英文标题】:How to read two lines at a time from a input file and add them to an object? 【发布时间】:2018-11-01 22:42:22 【问题描述】:

我试图一次从文本文件中读取两行,然后将这些行添加到一个名为 Record 的对象中,如下所示:例如,文本文件内容如下:

course
computer Science
plant
flower.gif
waterfall
A lot of water falling.
waterfall
waterfall.jpg

然后程序应该读取文件的前两行(第 1 行和第 2 行)并创建 Record Id1 = new Record("course", "text", "computer science"),然后读取接下来的两行(第 3 和第 4 行)并创建 Record Id2 = new Record("plant", "image", "flower.gif") 等等。 .

但是我的代码没有按照我想要的方式工作,主要是混淆了字符串inputLine1inputLine2。例如:代码应该创建Record Id1 = new Record("course", "text", "computer science"),它没有,而是创建Record Id1 = new Record("computer science", "text", "")。所以它读入第一行,然后用第二行替换。与Record Id2 = new Record("plant", "image", "flower.gif") 相同,它会创建Record Id2 = new Record("flower.gif", "image", "")

这是我的代码:

    File file = new File(args[0]);
    BufferedReader inputFile = null;
    try 
        inputFile = new BufferedReader(new FileReader(file));
     catch (FileNotFoundException e2) 
        e2.printStackTrace();
    

    String inputLine1, inputLine2;
    OrderedDictionary newTree = new OrderedDictionary();
    try 
        while ((inputLine1 = inputFile.readLine()) != null && (inputLine2 = inputFile.readLine()) != null)
            Record newRecord;
            if(inputLine2.endsWith(".jpg") || inputLine2.endsWith(".gif"))
                newRecord = new Record(new Pair(inputLine1, "image"), inputLine2);
             else if(inputLine2.endsWith(".wav") || inputLine2.endsWith(".mid"))
                newRecord = new Record(new Pair(inputLine1, "audio"), inputLine2);
             else 
                newRecord = new Record(new Pair(inputLine1, "text"), inputLine2);
            

            if(newTree.get(newRecord.getKey()) == null)
                newTree.put(newRecord);
            
        
     catch (IOException e1) 
        e1.printStackTrace();
    

【问题讨论】:

请解释一下“混淆字符串 inputLine1 和 inputLine2”是什么意思。 您预计会发生什么,而会发生什么?要精确。另外,如果在创建阅读器时抛出 FileNotFoundException,那么尝试读取行的意义何在? 感谢您的回复!因此,在代码应该创建Record Id1 = new Record("course", "text", "computer science") 的示例中,它没有,而是创建Record Id1 = new Record("computer science", "text", "")。所以它读入第一行,然后用第二行替换它,如果这有意义吗?与Record Id2 = new Record("plant", "image", "flower.gif") 相同,它会创建Record Id2 = new Record("flower.gif", "image", "") 在代码中使用调试器或 println()。如果 inputLine1 和 inputLine2 的值是您所期望的,那么问题出在 Record/Pair 类中。你没有发布。 那么这意味着该文件不包含您认为它包含的内容。每个非空行后都有一个空行。 【参考方案1】:

您为 jpg 和 gif 等编写的验证代码看起来不错,但是当它读取两行并连接它们时,您应该使用一个输入读取行并一次读取两次。然后连接它。这应该工作..

【讨论】:

以上是关于如何从输入文件中一次读取两行并将它们添加到对象中?的主要内容,如果未能解决你的问题,请参考以下文章

如何从大字符串中一次打印 20 行?

如何使用 MAC OSX 中的“默认值”从 plist 文件中一次读取多个值

如何在 Django 中一次将多个对象添加到 ManyToMany 关系?

如何从对象数组中读取特定值并将所有值添加到一个变量中?

如何从数组中一次获取一个对象?

如何从 txt 文件中读取特定的单词和数字并将它们保存在矩阵中