啃Java的日子之文件的编码及简单的目录遍历

本文介绍了不同字符编码(如UTF-8、GBK和UTF-16be)的特点及Java中字符串与字节间的转换方法,并展示了如何使用Java的File类来遍历目录及其子目录下的所有文件。

我们常常会出现当保存的是一个内容,但是你再打开某一个文件的时候,会显示乱码的情况,这就是编码的问题。

两种经常用的编码,一个是UTF-8,一个是GBK。

UTF-8中文占用三个自己,英文一个字节。GBK 中问占用两个字节,英文占用一个字节。

Java是双字节编码,UTF-16be

import java.io.UnsupportedEncodingException;

public class fileEncoding {

    /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        // 字符串转换为字节的形式
        String s="你好java";
        //GBK 编码,英文两个字节,英文一个字节
        byte [] bytes=s.getBytes("gbk");
        System.out.println("采用GBK 编码");
        for(byte b:bytes){
            //读取每一个字节(int 类型),然后将其获取到后面的几位然后转换输出
            
            System.out.print(Integer.toHexString(b & 0xff)+" ");//前几位是为了补齐位数而添加的在这里可以将其去掉

        }   
        System.out.println(" ");
        //UTF-8 字节编码,中文三个字节,英文一个字节
        byte[] bytes2=s.getBytes("utf-8");
        System.out.println("采用UTF-8");
        for(byte b2:bytes2)
        System.out.print(Integer.toHexString(b2 &0xff)+" ");
        System.out.println(" ");
        
        // Java采用utf-16be 编码 ,中文两个字节英文两个字节
        byte[] b3=s.getBytes("utf-16be");
        System.out.println("采用UTF-16be编码");
        for(byte b:b3)
            System.out.print(Integer.toHexString(b &0xff)+" ");
    }
}


将字节序列转换为字符串,要使用本身的编码方式在创建字符串的时候,new String 中可以传入编码方式作为参数.


二. 遍历目录下面的所有文件-----file类的使用

import java.io.File;
import java.io.IOException;

//file的过滤和遍历
public class fileUtil {
    /**
     * 列出指定目录下的所有文件
     * @param dir
     * @exception IOException
     */
    public static void listDirectory( File dir) throws IOException{
        //目录不存在
        if(!dir.exists()){
            throw new IllegalArgumentException("目录"+dir+"不存在");
        }
        //输入的不是目录
        if(!dir.isDirectory()){
            throw new IllegalArgumentException(dir+"不是目录");
        }
        /*
        String [] filenames=dir.list(); //返回字符串数组,直接子目录下面的内容,
        for(String s:filenames){
            System.out.println(dir+"\\"+s);
        }
        */
        //如果要遍历子目录那么就需要构造一个file对象然后在进行遍历,但是在Java中提供了这种API 可以帮助我们直接完成这个操作
        
        File[] files= dir.listFiles();//直接返回file对象,返回直接子目录的抽象
        if(files!=null&&files.length>0 )
        {
            for (File file:files){
            if(file.isDirectory()){
              listDirectory(file); 
            }
            else{
                System.out.println(file);
            }
        }
       
        }
        
        
    }
}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值