import java.io.*;
public class y{
public static void main(String args[]) {
byte a[]={97,98,99,100,101};
try{FileOutputStream f=new FileOutputStream("c:/u.txt");
f.write(a);
}catch(IOException e){System.out.println("错误");}
}}
文件执行完后,当我打开u。txt文件后,看到的确是“abcde”,这五个字符。如何修改才能将“97,98,99,100,101”这五个数字输出?
我的目的是想让u。txt文件中显示这五个数字。
为什么不显示这个数字呢?因为TXT文件把文件内容转换成Unicode码来输出给显示器的。你输入的这几个码值97,98,99,100,101就代表了abcde字符,而你想显示的字符97,98,99,100,101所对应的码值是97 - 5755 98 - 5756 99-5757等等。你只有向文件写入这些数字才可以显示对应的字符。一楼很聪明活用了FileWriter的write方法,注意他在这里f.write(a[i] + "");加了一个空字符"",这使得f调用的不再是write(byte)方法,而是write(String)方法,jvm自动把整个参数解析为字符串"97",然后写入文件,但是请你记住,无论使用何种方法,它都是将97转换成字符'9''7'的Unicode码来写入文件的。
如果楼主一定要用FileOutputStream的话(这个类没有write(String)方法,它是面向字节的,而FileWrite是面向字符的),那我建议你这样来定义a数组,byte a[]={'9','7','9','8','9','9','1','0','0','1','0','1'};
FileOutputStream是字节流。它把你数组里面的已经当成二进制的ASCII码了。所以输出abcde你要原样输出就用PrintStream过滤下。像楼上说的那样就可以了
import java.io.*;
public class y{
public static void main(String args[]) {
byte a[]={97,98,99,100,101};
try{FileWriter f=new FileWriter("c:/u.txt");
for (int i = 0; i < a.length; i++)
f.write(a[i] + "");
f.flush();
f.close();
}catch(IOException e){System.out.println("错误");}
}}
怎么不封装一层,PrintStream,像这样:
import java.io.*;
public class y {
public static void main(String args[]) {
byte a[] = { 97, 98, 99, 100, 101 };
try {
FileOutputStream f = new FileOutputStream("c:/u.txt");
PrintStream p = new PrintStream(f);
p.println(97);
} catch (IOException e) {
System.out.println("错误");
}
}
}
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息