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

从另一个txt文件复制内容后,如何使用Java重命名txt文件

章飞虎
2023-03-14

我已经创建了一个程序,其中有一个名为groups.txt.的文件这个文件包含一个名称列表。要删除一个组,它必须存在于文件中。我使用Scanner方法在每一行中搜索名称。如果它包含该行,它将val设置为1。这会触发val==1条件。在此块期间我想做的,是尝试从groups.txt文件中删除groupName。为此,我创建了一个名为TempFile的新txt文件,它复制了groups.txtEXCEPT groupName中的所有名称。然后将此文件重命名为groups.txt并删除旧的groups.txt文件。

除了重新命名,一切都按计划进行。临时工。txt文件仍然存在,组仍然存在。txt文件不变。我检查了布尔成功,结果总是返回false。有没有办法解决这个问题?

 if (method.equals("delete group")){
                int val = 0;
                String groupName = myClient.readLine();

                try {
                    Scanner file = new Scanner(new File("groups.txt"));

                    while (file.hasNextLine()){
                        String line = file.nextLine();

                        if (line.indexOf(groupName) != -1){

                                val = 1;    
                        } 
                    }
                     if (val == 1){

                                try {

                                    File groupFile = new File("groups.txt");
                                    File tempFile = new File("temp.txt");

                                    BufferedReader reader = new BufferedReader(new FileReader(groupFile));
                                    BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));

                                    String currentLine;
                                    System.out.println(groupName);
                                    while ((currentLine = reader.readLine()) != null){

                                        String trimLine = currentLine.trim();

                                        if (trimLine.equals(groupName)){
                                             continue;
                                        } else {
                                            writer.write(currentLine + System.getProperty("line.separator"));
                                        }
                                    }
                                    writer.close();
                                    reader.close();
                                    groupFile.delete();
                                    boolean success = tempFile.renameTo("groups.txt");

                                } catch (IOException f){
                                    System.err.println("File Not Found: " + f.getMessage());
                                }                       }

                } catch (FileNotFoundException f){
                    System.err.println("File Not Found Exception: " + f.getMessage());
                }

            }

以上代码之前:

 if (command.equals("group")){
            String method = myClient.readLine();

            if (method.equals("create group")){

                String groupName = myClient.readLine();

                int val = 0;

                try {
                    Scanner file = new Scanner(new File("groups.txt"));

                    while (file.hasNextLine()){
                        String line = file.nextLine();
                        if (line.indexOf(groupName) != -1){
                            Report.error("group name already exists, please pick another");
                            val = 1;                                
                        }
                    }
                } catch (FileNotFoundException f){
                    System.err.println("File Not Found: " + f.getMessage());
                }

                if (val == 0){
                    try {
                        PrintWriter out = new PrintWriter(new FileWriter("groups.txt", true));
                        out.println(groupName);
                        out.close();

                    } catch (IOException e){
                        Report.error("IOException: " + e.getMessage());
                    }
                }   

代码的第二部分,这是我最初更新groups.txt文件的地方。因此,每次用户添加组时,它都会通过在文件末尾添加新的groupName来更新groups.txt文件。首先,我使用Scanner确保groupName不存在。myClient是一个BufferedReader,它从另一个类读取,该类存储用户在命令行中键入的内容。

共有1个答案

胡野
2023-03-14

也不要忘记关闭扫描仪。首先,您应该让delete()工作,并确保您知道当前的工作目录,并编写与之相关的文件路径。查看:

File file = new File("abc.txt");
System.out.println(file.getAbsolutePath());

有一件事可能是不相关的,也可以检查一下你的环境,因为

在Unix风格的O/S中,不能跨文件系统重命名为()。此行为与Unix“mv”命令不同。当跨越文件系统时,mv会执行复制和删除操作,如果是这种情况,则必须执行此操作。如果您试图重命名为其他驱动器,Windows上也会发生同样的情况,例如C:-

 类似资料:
  • 我希望有人会花时间帮助我。我是Java新手,正在上一堂课尝试学习它。我有一个任务,我已经开始和删除了可能30次。我就是不喜欢这个。作业如下: 从txt文件中读取3列整数。一列有学生号,一列是作业的分数,第三列是作业的最大可能分数。(各10分学生5人)。 我必须至少使用1个数组。 列出从作业中获得的总分数,并合计5名学生在10项作业中每个人可能获得的最高分数。然后将学生号、分数、作业的最大可能分数、

  • 我正在学习NLTk,我需要加载一个大文件,我不想把它保存在我的桌面上。我怎么能用网站上托管的python读取文件? 我在这里尝试了这段代码,但它不起作用,我假设openwith是它的rson,但我需要使用openwith,因为在这种情况下我需要将它保存为file-myfile。 这就是错误: 如何在脚本中使用该文件而不下载整个文件? 我更改了代码以处理请求 但是现在当我运行这个我得到这个错误:

  • 我再次问这个问题,因为我还没有为我的问题找到一个明确的答案。 我有一组方程式: 我需要一个python脚本使用这两个等式使用txt文件中的值来生成另一个x和y列的值,将绘制这些值。 这是我的txt文件的前几行。config是与四个值关联的结构的名称 下面是我的脚本,但我不断收到错误,如 我假设x值不是configname中的数值,但不确定。

  • 问题内容: 如何在puppeteer中下载,访问和处理复杂的txt文件? 我可以访问xml文件[Node.js puppeteer-下载/访问xml文件并处理内容),如下所示: 这给了我想要的值。但是,如果我要访问如下所示的txt文件…,并且要进行测试以获取所有“ VALUEA”,我会得到: 那就是我正在查看的TXT文件: 最后,我要获取所有VALUE(主要是VALUEA,VALUEB,VALUE

  • 我以.txt格式抓取了NLP数据,需要将其复制到Excel。数据位于名为“article”的文件夹中。此文件夹中包含2012年至2020年的其他子文件夹。子文件夹的名称为日期,例如“2012-04-18”。每个子文件夹中都有几个.txt文件。 我想:复制每个. txt文件的内容,并将它们与子文件夹上显示的相应日期匹配到excel文件中。因此excel文件将有一列日期(从子文件夹复制)和相应的行,其

  • 如何使用java将文件从一个文件夹复制到另一个文件夹?我试图使用 如果目标文件夹不包含具有相同名称的文件,则此操作有效。如果我尝试将文件粘贴到文件夹中,它会引发IOException。然而,有什么办法可以解决这个问题吗?可能我只想将自动重命名为pasteItem(1)或类似名称的文件粘贴。请建议。 事实上,如果同名文件已经存在,我将为该文件获得一个新名称。我不知道如何复制文件,然后重命名。如果我先