Невозможно записать некоторые значения ASCII выше в файл в Java - PullRequest
1 голос
/ 27 июня 2011

Я пишу код Java для записи символов ASCII в файл.Но когда я пытаюсь записать любой символ значения 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();
    }

}

}

Ответы [ 3 ]

2 голосов
/ 27 июня 2011

Поскольку вы находитесь за пределами диапазона значений ASCII. Вместо этого используйте StringWriter и передайте нужные значения в виде строки.

1 голос
/ 27 июня 2011

Fromw Wikipedia: ASCII включает определения для 128 символов: 33 являются непечатными управляющими символами (в настоящее время в основном устарели), которые влияют на обработку текста и пространства;94 печатных символа, а пробел считается невидимым изображением.ASCII резервирует первые 32 кода (цифры от 0 до 31) для управляющих символов.Код 127 официально называется «удалить».Но существует Extended ASCII.Таким образом, для записи расширенного ASCII вам необходимо использовать кодировку, например:

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

В этом случае вы получите: ®.Таким образом, для вывода ASCII более 127 (8 бит не 7 бит как ASCII США) необходимо использовать кодирование.Надеюсь, это поможет.

1 голос
/ 27 июня 2011

Когда я запускаю это

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 вам нужно 2-3 байта для символов около 127)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...