如何读取这个文件(菜鸟级问题)

saygoodbyetoyou 2010-02-26 09:19:32
import java.io.*;
class Example
{
public static void main(String[] args)
{
long n=0;

try
{
FileReader fd=new FileReader("d:\\1.txt");
//FileReader fd=new FileReader("d:\\1.java");

while((n=fd.read())!=-1)
{
System.out.print((char)n);
}
fd.close();

}
catch(IOException e)
{
System.out.println("系统找不到指定文件");
e.printStackTrace();
System.exit(-4);
}
}
}
为什么用此段程序读取1.txt中的汉字就会出现乱码,而如果在.java文件中保存相同的汉字内容就不会出现乱码,是因为java文件和txt文件的编码方式不同么?
...全文
74 10 打赏 收藏 转发到动态 举报
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
魏城老马 2010-02-27
  • 打赏
  • 举报
回复
在字节流的时候一定要小心:
读:System.out.println(new String (new string(test.getBytes("iso8859-1"))));
写:os.write(content.getBytes());
祝郎熙 2010-02-27
  • 打赏
  • 举报
回复
我不懂才看的,大家来点好的方法吧
魏城老马 2010-02-27
  • 打赏
  • 举报
回复
字节流:
package IO;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* test.getBytes("iso8859-1"))
* 用OutputStream和InputStream实现文件的写入和读取(字节的写入和读取)
*
*/
public class InAndOut {
String path="e:\\abc.txt";
public static void main(String[] args) {
InAndOut io=new InAndOut ();
io.write("我是邪恶少年!");
io.read();
}
public void write(String content)
{
File f=new File (path);
boolean add=true;//是否写入
try {
if (f.exists()==false) {
f.createNewFile();
FileOutputStream os=new FileOutputStream (f);//不用判断是否写入
//FileOutputStream os=new FileOutputStream (f,add);//要判断是否写入
os.write(content.getBytes());
os.flush();
os.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void read()
{
try {
InputStream is=new FileInputStream(path);
//BufferedInputStream bis=new BufferedInputStream(new FileInputStream(path));
int temp=0;
String test="";
try {
while ((temp=is.read())!=-1) {
test+=(char)temp;
}
System.out.println(new String (test.getBytes("iso8859-1")));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

字符流
package IO;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
/**
*
*用read和write实现文件的写入和读取(字符的写入和读取)
*
*/
public class ReadAndWrite {
//定义文件的路径,一边写入和读取使用
String path="e:\\abc.txt";

public static void main(String[] args) {
ReadAndWrite r=new ReadAndWrite ();
r.writeFile("我乃邪恶少年是也!");
r.readFile();
}
private void readFile() {
// TODO Auto-generated method stub
try {
Reader r=new BufferedReader (new FileReader(path));
String test="";
int temp=0;
try {
while ((temp=r.read())!=-1) {
test+=(char)temp;
}
System.out.println(test);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void writeFile(String content) {
// TODO Auto-generated method stub
File f=new File (path);
if (f.exists()==false) {
try {
f.createNewFile();
FileWriter fw=new FileWriter (f);
fw.write(content);
fw.flush();
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}else {
System.out.println(path+"已存在,写入失败,源文件是");
}
}
}
musiclee 2010-02-26
  • 打赏
  • 举报
回复
请问你是如何解决的?
musiclee 2010-02-26
  • 打赏
  • 举报
回复
忘了忘了 你看看你的IDE的默认编码是什么 如果是eclipse的话 看看首选项中的编码设置。。ANSI和GBK应当兼容的
saygoodbyetoyou 2010-02-26
  • 打赏
  • 举报
回复
引用 3 楼 musiclee 的回复:
没有错 Windows默认保存编码是ANSI编码(汉字是2个字节 英文是一个字节)  .java应当是用得unicode编码方式。FileReader应当是以默认OS字符编码读的 而Windows默认字符编码是GBK(貌似是两个字节表示一个字符 :( 我也不是很确定),所以就会乱码

应该不是 我觉得按照你的说法 将txt文件改为unicode编码也不会出现乱码 但事实上不是 只能用ansi编码方式,才不会出现乱码,ansi编码方式也是用两个字节储存一个字符的一种编码方式的延伸。我刚问完这个问题自己就把这个问题解决了...
saygoodbyetoyou 2010-02-26
  • 打赏
  • 举报
回复
引用 3 楼 musiclee 的回复:
没有错 Windows默认保存编码是ANSI编码(汉字是2个字节 英文是一个字节)  .java应当是用得unicode编码方式。FileReader应当是以默认OS字符编码读的 而Windows默认字符编码是GBK(貌似是两个字节表示一个字符 :( 我也不是很确定),所以就会乱码

应该不是 我觉得按照你的说法 将txt文件改为unicode编码也不会出现乱码 但事实上不是 只能用ansi编码方式,才不会出现乱码,ansi编码方式也是用两个字节储存一个字符的一种编码方式的延伸。我刚问完这个问题自己就把这个问题解决了...
musiclee 2010-02-26
  • 打赏
  • 举报
回复
没有错 Windows默认保存编码是ANSI编码(汉字是2个字节 英文是一个字节) .java应当是用得unicode编码方式。FileReader应当是以默认OS字符编码读的 而Windows默认字符编码是GBK(貌似是两个字节表示一个字符 :( 我也不是很确定),所以就会乱码
saygoodbyetoyou 2010-02-26
  • 打赏
  • 举报
回复
引用 1 楼 jypapgl 的回复:
打开你的 1.txt  另存  看看保存的是什么格式的  挨个试试就明白了

早都试过了 没用....
jypapgl 2010-02-26
  • 打赏
  • 举报
回复
打开你的 1.txt 另存 看看保存的是什么格式的 挨个试试就明白了
相关推荐

62,566

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告