我们常常会出现当保存的是一个内容,但是你再打开某一个文件的时候,会显示乱码的情况,这就是编码的问题。
两种经常用的编码,一个是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);
}
}
}
}
}