【问题标题】:PrintWriter creates empty filePrintWriter 创建空文件
【发布时间】:2020-01-31 01:05:10
【问题描述】:

我有以下问题我想读取一个文件并将每个字母在字母表中向下移动 3 个位置。凯撒密码工作正常,我可以打印它,但每当我尝试使用 PrintWriter 将它传递给新文件时,该文件仍然为空。

import java.io.IOException;
import java.io.File;
import java.io.PrintWriter;
import java.util.Scanner;

public static char[] encrypt (int offset, char [] charArray) {
        char [] cryptArray = new char [charArray.length];

        for (int i = 0; i < charArray.length; i++) {
            int crypt = (charArray[i] + offset);
            cryptArray[i] = (char) (crypt);
        }
        return cryptArray;
    }

public static void main(String[] args) {
        String text = "";
        StringBuilder convert = new StringBuilder();

        try {
            File file = new File ("C:\\PATH\\file.txt");
            Scanner input = new Scanner (file);

            while (input.hasNextLine()) {
                text = input.nextLine();
                convert = new StringBuilder (text);

                char [] arr = text.toCharArray();
                char [] newArr = encrypt(3, arr);

                for (int i = 0; i < newArr.length; i++) {
                    convert.append(newArr[i]).toString();
                }
            }
            input.close();

        } catch (IOException e) {
            e.printStackTrace(); 
        }
        try {
            // write file
            File outFile = new File ("C:\\PATH\\newfile.txt");
            PrintWriter printer = new PrintWriter (outFile);

            printer.print(convert);
            printer.close();

        } catch (IOException e) {
            e.printStackTrace();
        }   
    }
}

【问题讨论】:

  • 这对你没有多大帮助,但它可以在我的电脑上运行
  • 如果代码对你来说很好的话,也许它会是 eclipse 的东西?
  • 在写入文件之前可以打印convert吗?使用System.out.print(convert)
  • 我通过 Eclipse 在 ubuntu 上启动了它。我觉得很奇怪你没有收到任何错误。你尝试过不同的路径吗?
  • 只有当我把它放在循环中时它才会打印。是的,我也已经尝试过不同的路径,我现在的猜测是每个字符都没有正确附加到字符串(参见 for 循环)。

标签: java file printwriter


【解决方案1】:

删除循环中的convert = new StringBuilder (text);。它正在覆盖上一个循环中的数据

【讨论】:

  • 这会导致无限循环。
  • 尝试使用您在上面粘贴的代码并删除该行,而不是使用我们不知道引入了哪些更改的当前版本的代码
  • 只删除我提到的那一行。不要删除它上面的行text = input.nextLine();
  • @Peon 它不会导致无限循环。你改变了别的东西。如果输入是无限长的或者你没有使用它,你只能得到一个无限循环。
  • 谢谢你们,我现在修复了它,我还必须在附加到 Stringbuilder 时删除 .toString() 否则循环对我来说是无限的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-17
相关资源
最近更新 更多