当前位置: 首页 > 知识库问答 >
问题:

Java:文件读取/添加到文件程序未按预期工作(逻辑错误)[关闭]

微生昌胤
2023-03-14

我正在尝试编写一个程序:

  • 通过用户给定的文件路径扫描文件
  • 数着它的话
  • 将其内容打印到终端
  • 通过用户给出的另一个文件路径在新文件中添加到它

它还可以计算新文件的字数,并将其内容打印到终端。

但是我对那个新文件有两个问题:1-它只保存了我的adittion而没有旧文件的内容(即使我使用了. conat()方法)2-它不能计算那个新文件的单词。

除此之外,我还努力解决这些问题,但我无法。。。

package com;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.io.FileWriter;
import java.io.IOException;

public class FileReader {
  public static void main(String[] args) throws IOException {
    Scanner scanTwo = new Scanner(System.in);
    System.out.println("Please Enter Your File Path");
    String filePath = scanTwo.nextLine();  
    File fileInput = new File(filePath);
    Scanner fileScanner = new Scanner(fileInput);
    System.out.println(fileScanner.nextLine());
    System.out.println("Commands: PRINT.FILE --> Prints all file    COUNT.WORDS --> Counts all words   ADD.TO.FILE --> add to selected file");
    System.out.println("Type Command:");
    
    Scanner scan = new Scanner(System.in);
    String printFileCommand = scan.nextLine();
     
     
     if (printFileCommand.contains("PRINT.FILE")) {
       while (fileScanner.hasNextLine()) {
         System.out.println(fileScanner.nextLine());
        }
      } else if (printFileCommand.contains("COUNT.WORDS")) {
        int wordCount = 0;
        while (fileScanner.hasNext()) {
          String fileWords = fileScanner.next();
          wordCount++;
        }
        System.out.println(wordCount);
      } else if (printFileCommand.contains("ADD.TO.FILE")) {
        System.out.println("Please Enter Your new file path");
        String newFilePath = scan.nextLine();
        FileWriter addToFile = new FileWriter(newFilePath);
        System.out.println("Please Enter Your Additions: ");
        String newFileContent = scan.nextLine();
        File newFileInput = new File(newFilePath);
        Scanner newFileScanner = new Scanner(newFileInput); 
        while (newFileScanner.hasNextLine()) {
          newFileContent = newFileContent.concat(newFileScanner.nextLine() + "\n");
        }
        addToFile.write(newFileContent);
        addToFile.close();
        System.out.println("Commands: PRINT.FILE --> Prints all file    COUNT.WORDS --> Counts all words");
        System.out.println("Please Enter Your Command:");
        String newCommand = scan.nextLine();
        if (newCommand.contains("PRINT.FILE")) {
          while (newFileScanner.hasNextLine()) {
            System.out.println(newFileScanner.nextLine());
           }
        } else if (newCommand.contains("COUNT.WORD")) {
          int newWordCount = 0;
           while (newFileScanner.hasNext()) {
           String newFileWords = newFileScanner.next();
           newWordCount++;
         }
         System.out.println(newWordCount);
        } else {
          System.out.println("COMMAND INVALID!");
        }
        addToFile.close();
        // newFileScanner.close();
      }
      else {
        System.out.println("COMMAND INVALID!");
      }
      scanTwo.close();
      fileScanner.close();
      scan.close();
    } 
  }

共有1个答案

琴元凯
2023-03-14

是否确实打开旧文件以进行读取和连接?我看到您通过新文件路径打开新文件,而此文件为空,这是您的代码:

File newFileInput = new File(newFilePath);
Scanner newFileScanner = new Scanner(newFileInput); 
while (newFileScanner.hasNextLine()) {
    newFileContent = newFileContent.concat(newFileScanner.nextLine() + "\n");
}

此外,如果您已经使用Scanner读取文件,则需要创建新的Scanner实例(重置. nextLine()Scanner)

 类似资料:
  • 我试图重写并为页脚返回不同的视图类型,但在函数中进行整数比较失败: 此图像显示了一个调试会话,其中输入为21,私有列表的大小为21,但是当我按下“step over”时,会跳过条件代码。 如果两个整数相等,为什么返回false? 我在运行之前清理并重建了我的项目。 更新: 当整数被硬编码时,它可以工作: 这是完整的适配器:https://gist.github.com/fergusom/79C6D

  • 问题内容: 我知道如何按字节读取文件,但是找不到如何按字节读取文件的示例。我有一个字节数组,我想读取512bytes的文件并通过套接字发送它们。 我尝试读取文件的总字节,然后减去512字节,直到得到小于512字节的块,并发出EOF和传输结束的信号。 我正在尝试实现TFTP,其中以512字节块发送数据。 无论如何,我们将为一个例子而感激。 问题答案: 您…一次读取512个字节。

  • 问题内容: 我想读取不同块的日志文件,以使其成为多线程。该应用程序将在具有多个硬盘的服务器端环境中运行。读取成块后,应用程序将处理每个块的每一行。 我已经用bufferedreader完成了对每个文件行的读取,并且可以通过将RandomAccessFile与MappedByteBuffer结合使用来制作文件块,但是将这两者结合起来并不容易。 问题在于该块正好切入我块的最后一行。我从来没有块的最后一

  • 我有一个名为“add”的方法,它将字符串作为参数,并使用bufferedwriter将其写入文件。完成此操作后,bufferedwriter将被刷新。 在另一个方法“read”中,我遍历文件中的行,但这些行是空的(因此我不能打印它们)。

  • 我正在使用spring Roo并希望访问Controller类中的一个bean,该类在ApplicationContext.xml中具有以下配置: 配置类本身是: 在我的Controller中,我认为一个简单的Autowired注释应该可以完成这项工作 在启动过程中,spring在setSkipWeeks方法中打印消息。不幸的是,每当我在控制器中调用config.getSkipWeeks()时,它

  • 当我运行以下程序时,它只打印 然而,从Java 8的equalsIgnoreCase文档中我们发现: 如果以下至少一项为真,则两个字符c1和c2被视为相同的忽略情况: •对每个字符应用java.lang.character.ToUpperCase(char)方法会产生相同的结果 所以我的问题是为什么这个程序不打印 在这两种操作中,都使用了大写字符。