1

ファイルにASCII文字を書き込むJavaコードを書いています。しかし、ASCII 値が 140 を超えるか 32 未満の文字をテキスト ファイルに書き込もうとすると、空のファイルが作成されます。ファイルには何も書き込まれません。私のプログラムは、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

ウィキペディアより: ASCII には 128 文字の定義が含まれています。94 は印刷可能な文字であり、スペースは目に見えないグラフィックと見なされます。ASCII では、制御文字用に最初の 32 コード (10 進数の 0 ~ 31 の数字) が予約されています。Code 127 の正式名称は「delete」です。ただし、拡張 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 (ASCII USA として 7 ビット以外の 8 ビット) の出力には、エンコードを使用する必要があります。お役に立てれば。

于 2011-06-27T14:51:48.010 に答える