Java的ASCII输出到文件 [英] Java ASCII output to file

查看:167
本文介绍了Java的ASCII输出到文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试输出一个ASCII值到一个文件时,有些字符会返回错误的值。例子:

  import java.io.BufferedReader; 
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.PrintWriter;

public class test {
public static void main(String args []){
//假设:
writeFile(./test.txt) ; //写入ASCII 147
readFile(./test.txt); //读取ASCII 147
}

public static boolean writeFile(String path){
try {
PrintWriter fo = new PrintWriter(new FileOutputStream(new File )));
fo.print((char)147); // WRITES? TO FILE(ASCII 63,NOT 147)
fo.close();
} catch(Exception e){
return true;
}
返回false;


public static boolean readFile(String path){
try {
BufferedReader fi = new BufferedReader(new FileReader(path));
char c [] = fi.readLine()。toCharArray();
System.out.println((int)c [0]); //显而易见的是,
返回true;
} catch(Exception e){
e.printStackTrace();
返回false;





我做错了什么?任何帮助将是伟大的。谢谢。

解决方案



你应该给出一个特定的编码来表示你感兴趣的字符 - UTF-8通常是一个不错的选择,并且使用相同的编码读写。



不幸的是 FileWriter FileReader 不允许你指定编码,所以你会需要 FileOutputStream FileInputStream 包装在 OutputStreamWriter InputStreamReader

  import java.io. *; 
import java.nio.charset。*;
$ b $ public class Test {

private static Charset UTF8 = Charset.forName(UTF-8);
$ b $ public static void main(String args [])throws IOException {
writeFile(./ test.txt);
readFile(./test.txt);

$ b $ public static void writeFile(String path)throws IOException {
Writer writer = new OutputStreamWriter(new FileOutputStream(path),UTF8);
try {
writer.write((char)147);
} finally {
writer.close();


$ b $ public static void readFile(String path)throws IOException {
Reader reader = new InputStreamReader(new FileInputStream(path),UTF8);
尝试{
int c = reader.read();
System.out.println(c);
} finally {
reader.close();
}
}
}


When I try to output an ASCII value to a file, with some characters it returns the wrong value. Example:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.PrintWriter;

    public class test {
    public static void main(String args[]){
                                  //Supposed to:
        writeFile("./test.txt"); //write ASCII 147
        readFile("./test.txt"); //read ASCII 147
    }

    public static boolean writeFile(String path){
        try{
            PrintWriter fo = new PrintWriter(new FileOutputStream(new File(path)));
            fo.print((char) 147); //WRITES "?" TO FILE (ASCII 63, NOT 147)
            fo.close();
        }catch(Exception e){
            return true;
        }
        return false;
    }

    public static boolean readFile(String path){
        try {
            BufferedReader fi = new BufferedReader(new FileReader(path));
            char c[] = fi.readLine().toCharArray();
            System.out.println((int) c[0]); //OBVIOUSLY PRINTS 63 INSTEAD OF 147
            fi.close();
            return true;
        } catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }
}

What am I doing wrong? any help would be great. Thanks.

解决方案

There's no such thing as "character 147" in ASCII.

You should give a specific encoding which can represent the characters you're interested in - UTF-8 is usually a good choice - and use the same encoding for both reading and writing.

Unfortunately FileWriter and FileReader don't allow you to specify the encoding, so you'll need FileOutputStream and FileInputStream wrapped in an OutputStreamWriter and InputStreamReader:

import java.io.*;
import java.nio.charset.*;

public class Test {

    private static Charset UTF8 = Charset.forName("UTF-8");

    public static void main(String args[]) throws IOException {
        writeFile("./test.txt");
        readFile("./test.txt");
    }

    public static void writeFile(String path) throws IOException {
        Writer writer = new OutputStreamWriter(new FileOutputStream(path), UTF8);
        try {
            writer.write((char) 147);
        } finally {
            writer.close();
        }
    }

    public static void readFile(String path) throws IOException {
        Reader reader = new InputStreamReader(new FileInputStream(path), UTF8);
        try {
            int c = reader.read();
            System.out.println(c);
        } finally {
            reader.close();
        }
    }
}

这篇关于Java的ASCII输出到文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆