public class DataInputAndOutput { public static void main(String[] args) throws IOException {
try {
FileOutputStream fos = new FileOutputStream("f://myDoc/s4.txt");
DataOutputStream out = new DataOutputStream(new BufferedOutputStream(fos));
float[]prices={105.5f,65.5f,59.5f};
int[]amounts={10,15,22};
String[]names={"Java","Sql","Jsp"};
for(int i=0;i<prices.length;i++){
out.writeFloat(prices[i]);
out.writeInt(amounts[i]);
out.writeUTF(names[i]);
out.writeChars("\n");
}
out.close();
fos.close();
DataInputStream in = new DataInputStream(new BufferedInputStream
(new FileInputStream("f://myDoc/s4.txt")));
double price;
int amount;
String name;
double total=0.0;
System.out.println("您的订单如下:\n书名\t数量\t单价");
while(in.available()!=0){
price = in.readFloat();
amount = in.readInt();
name = in.readUTF();
System.out.println(name+"\t"+amount+"\t$"+price);
total=total+amount*price;
in.readLine();
}
in.close();
} catch (FileNotFoundException e) {
System.out.println("文件没找到!");
}
}
}为什么这段代码中的内容写在在文件里的事乱码,而输出到控制台却正常,该怎么修改,谢谢!

解决方案 »

  1.   

    重新设置编译器的编码。改成UTF-8或者GBK
      

  2.   

    因为你存的是字节流。当你读的时候
    price = in.readFloat();
    amount = in.readInt();
    name = in.readUTF();
    java 帮你转码了,所以你能在控制台看到正常输出。
      

  3.   

    给你个例子吧网上有很多例子public class DataInputAndOutput { public static void main(String[] args) throws IOException {
    try {
    // FileOutputStream fos = new FileOutputStream("s4.txt");
    // DataOutputStream out = new DataOutputStream(
    // new BufferedOutputStream(fos));
    FileWriter fw = new FileWriter("s4.txt");
    PrintWriter out = new PrintWriter(new BufferedWriter(fw));
    float[] prices = { 105.5f, 65.5f, 59.5f };
    int[] amounts = { 10, 15, 22 };
    String[] names = { "Java", "Sql", "Jsp" };
    for (int i = 0; i < prices.length; i++) {
    out.write(names[i]+"\t");
    out.write(String.valueOf("$"+prices[i])+"\t");
    out.write(String.valueOf(amounts[i])+"\t");
    out.write("\n");
    // out.writeFloat(prices[i]);
    // out.writeInt(amounts[i]);
    // out.writeUTF(names[i]);
    // out.writeChars("\n");
    }
    out.flush();
    out.close();
    DataInputStream in = new DataInputStream(new BufferedInputStream(
    new FileInputStream("s4.txt")));
    InputStreamReader isr = new InputStreamReader(in, "utf-8");
    System.out.println("您的订单如下:\n书名\t数量\t单价");
    char[] cbuf = new char[200];
    int str = 0;
    while ((str = isr.read(cbuf))!= -1){
    System.out.print(cbuf);
    }
    isr.getEncoding();
    isr.close();
    } catch (FileNotFoundException e) {
    System.out.println("文件没找到!");
    }
    }
    }
    //为了说你实现字节流转换成字符流,特意用字节流读取,在转化成字符流,其实可以直接字符流读取数据。具体情况具体分析,能抓到猫的老鼠就是好老鼠。