用Java将非常大的BigIntegers打印到文件中

我正在尝试将很大的BigInteger打印到.txt文件,但是当数字达到一定大小时,它什么也不打印.码:

BigInteger bi = new BigInteger("16777216");
int exponent = 1000000;
bi = bi.pow(exponent);

String txtToPrint = bi.toString();
sendToFile(txtToPrint, "output.txt");

private static void sendToFile(String txtToPrint, String fileName) {

        try {

            FileWriter fileWriter = new FileWriter(fileName);
            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
            bufferedWriter.write(txtToPrint);

            bufferedWriter.close();
        }
        catch(IOException e) {
            System.out.println("Error writing to file '" + fileName + "'");
        }

}

每当指数大于566时,输出文件为空,而不是包含数字.目标是拥有1000000,甚至更大的指数.

我以为BigInteger没有大小限制,所以我的问题是:我超出了什么限制,有没有办法解决这个问题?

编辑:尝试刷新并关闭文件编写器时,出现此异常:

java.io.IOException: Stream closed
at sun.nio.cs.StreamEncoder.ensureOpen(Unknown Source)
at sun.nio.cs.StreamEncoder.flush(Unknown Source)
at java.io.OutputStreamWriter.flush(Unknown Source)
at PrintInt.main(PrintInt.java:4

编辑:仅在Eclipse中运行程序时才会出现问题,我尝试将其导出到外部jar中,并且一切正常.我正在使用Eclipse Mars.1版本(4.5.1)和Java jre1.8.0_131和Cp1252编码.

解决方法:

我主要是在这里猜测.我猜问题出在BufferWriter.

让我们尝试使用更直接的方法Outputstream并尝试使用资源正确关闭所有内容.

File f = new File(fileName);
try (
        FileOutputStream fos = new FileOutputStream(f);
        OutputStreamWriter os = new OutputStreamWriter(fos);
        Writer out = new BufferedWriter(os) 
){
    out.write(txtToPrint);
} catch(IOException e) {
    System.out.println("Error writing to file '" + fileName + "'");
}

我在过去曾见过一些操作系统同步问题,但文件从不丢失数据,只是复制了一些延迟的数据……但是为什么不……在写完之后,只需等待操作系统验证数据在文件中刷新(不在操作系统缓存中)

out.flush(); //flush the stream
fos.getFD().sync(); //sync with the OS
上一篇:JAVA杂记


下一篇:java-在Python v 3.5.2和v 2.7.12中结果不同,但是v 2.7.12是正确的吗?