1

我正在编写一个 java 代码来将 ASCII 字符写入文件。但是当我尝试将任何大于 140 或小于 32 的 ASCII 值的字符写入文本文件时,我得到一个空白文件。它不会向文件中写入任何内容。我的程序对于 32 到 140 之间的所有值都可以成功运行。请帮助.....这是代码

public class IO {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    try {
        FileOutputStream fs=new FileOutputStream("C:/Users/Shantanu/Desktop/abc.txt");
        fs.write(143);  
        fs.close();
        System.out.println("finished");
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

}

4

3 回答 3

2

因为您超出了 ASCII 值范围。改用 StringWriter 并将所需的值作为字符串传递。

于 2011-06-27T14:19:38.253 回答
1

当我运行这个

final String name = "abc.txt";

FileOutputStream fs = new FileOutputStream(name);
fs.write(143);
fs.close();

System.out.println("finished, file.length=" + new File(name).length());

我明白了

finished, file.length=1

由于您写入 1 个字节,因此您应该期望它为 1 个字节长。

但是,如果您尝试将其读取为 UTF-8 或其他编码,则可能少于 1 个字符(例如,在 UTF-8 中,大约 127 个字符需要 2-3 个字节)

于 2011-06-27T14:36:26.633 回答
1

Fromw Wikipedia:ASCII 包含 128 个字符的定义:33 个是影响文本和空格处理方式的非打印控制字符(现在大部分已过时);94 是可打印字符,空格被认为是不可见的图形。ASCII 为控制字符保留前 32 个代码(数字 0-31 十进制)。代码 127 正式命名为“删除”。但存在扩展ASCII。因此,对于编写扩展 ASCII,您需要使用如下编码:

System.setProperty("file.encoding", "Cp1252");
FileOutputStream fs = new FileOutputStream("C:/abc.txt");
char c=(char)174;
fs.write(c);
fs.close();

在这种情况下,您会收到:®。所以输出超过 127 位的 ASCII(8 位非 7 位的 ASCII USA)需要使用编码。希望这可以帮助。

于 2011-06-27T14:51:48.010 回答