当先锋百科网

首页 1 2 3 4 5 6 7

不管是用字节流还是字符流,都可以轻松的进行文件读取。当然,它们对乱码问题的处理方式是不同的。

1. 字节流

/**  
     * @param args  
     */  
    public static void main(String[] args) {   
        try {   
            InputStream in = new BufferedInputStream(new FileInputStream("D:/temp/a.txt"));   
            int c;             
            StringBuffer sb = new StringBuffer();   
            while ((c = in.read())>0){   
                sb.append((char)c);   
  
            }              
               
            String response = new String(sb.toString().getBytes("iso-8859-1"), "gb2312");   
            System.out.print(response);   
        } catch (FileNotFoundException e) {   
            // TODO Auto-generated catch block   
            e.printStackTrace();   
        } catch (IOException e) {   
            // TODO Auto-generated catch block   
            e.printStackTrace();   
        }   
            
  
    }
处理方法:对读取到的文件内容进行字符编码转换

 

2. 字符流

/**  
     * Read file's content  
     *   
     * @param fileAndPath String the file and path  
     * @return String the file's content  
     */  
    public static String readFile (String fileAndPath) {   
        String fileContent = "";   
        File file = new File(fileAndPath);   
        if (file.isFile() && file.exists()) {      
            try {              
               
                InputStreamReader in = new InputStreamReader(new FileInputStream(file), "gb2312");   
                BufferedReader bf = new BufferedReader(in);            
                String temp;   
                while ((temp=bf.readLine()) !=null) {   
                    fileContent += temp+"\n";   
                }   
                bf.close();   
                in.close();                
                   
            }catch (FileNotFoundException e) {                 
                System.out.println("File not found");   
                e.printStackTrace();   
                   
            } catch (IOException e) {   
                System.out.println("Something wrong when reading file");   
                e.printStackTrace();   
            }    
        }              
          
        return fileContent;   
           
    }

处理方法: 读取文件时,用字符流类InputStreamReader进行编码转换

 

3. Linux 平台下

暂时没有碰到这样的问题。但是据说在Linux平台下,用字符流读取会有乱码问题。

-----------------------------------------------------

项目中要求读取数据文件通过java程序导入数据库,数据文件是ANSI编码格式的,在windows环境中没有什么问题,windows会自动将编码转换成为gb2312的,但是在linux平台上由于多语言,使用InputStreamReader由字节码转换为字符码的时候会容易产生无法正确转换的乱码,解决方法为读取的时候采用iso-8859-1格式读取,在程序中再次转码。

   BufferedReader reader = new BufferedReader(new InputStreamReader(
     new FileInputStream(filename),"iso-8859-1"));

    String line = reader.readLine();

    line = new String("iso-8859-1","gb2312");

 

Java文件读取 中文乱码

1 字节流以及编码转换说明Stringstr="中";byte[]b_gbk=str.getBytes("GBK");byte[]b_utf8=str.getBytes("UTF-8");Strings_gbk=newString(b_gbk,"GBK");Strings_utf8=newString(b_utf8,"UTF-8");System.out.println(s...

利用JAVA IO 解决乱码的问题

  前一段时间做一个法国的项目,其中有一个数据同步的问题,客户给我们他们从自己数据库导出的xml格式的数据,我在这边写了一个定时程序,定期检测文件是否更新,并同步xml格式的数据到我们这边的数据库中。当时自己...

在使用java io流读取文件时的乱码问题

publicvoidinit()throwsServletException{ //初始化阶段,读取new_words.txt //web工程中读取文件,必须使用绝对磁盘路径 Stringpath=getServletContext().getRealPath("/WEB-INF/new_words.txt"); try{ BufferedRea...