JavaSE入门学习42:文件传输基础之I/O流(一)

来源:互联网 发布:百度知道关注软件 编辑:程序博客网 时间:2024/06/05 22:36

       一编码问题

       计算机的编码问题

       1)在一个IO文件下建立三个文本文件,第一个文件名是联想,内容也是联想;第二个文件名是联通,内容也是联

通;第三个文件名是联,内容也是联。


       2)依次打开三个文件,会发现名称叫做联的文件和名称叫做联通的文件中的内容都是乱码,而名称叫做联想的文

件中的内容却是正常显示。


      3)我们在建立文本文件的时候并没有指定编码格式,而是采用默认的编码格式,一般计算机系统采用的默认编码

格式是ANSI编码,也有其他的编码格式,比如GB2312和UTF-8,都是我们常用的编码格式。我们可以从这点下手,

找到上述三个文件在保存时都是以何种编码格式存储的,我们发现乱码的两个文件的编码格式为

UTF-8,而正常显示的编码格式为ANSI编码格式。



       4)实例代码:

public class EncodeDemo{    public static void main(String[] args) throws Exception{        String s="IT行业";        //转换成字节序列用的是项目默认的编码ANSI        byte[] bytes1=s.getBytes();        for(byte b:bytes1){            //把字节转换成了int以16进制的方式显示            System.out.print(Integer.toHexString(b & 0xff)+" ");        }        System.out.println();        byte[] bytes2=s.getBytes("gbk");        //gbk编码中文占用2个字节,英文占用1个字节        for(byte b:bytes2){            System.out.print(Integer.toHexString(b & 0xff)+" ");        }        System.out.println();        byte[] bytes3=s.getBytes("utf-8");        //utf-8编码中文占用3个字节,英文占用1个字节        for(byte b:bytes3){            System.out.print(Integer.toHexString(b & 0xff)+" ");        }        //Java是双字节编码utf-16be        System.out.println();        byte[] bytes4=s.getBytes("utf-16be");        //utf-16be编码中文占用2个字节,英文占用2个字节        for(byte b:bytes4){            System.out.print(Integer.toHexString(b & 0xff)+" ");        }        System.out.println();        /*当你的字节序列是某种编码时,这个时候想把字节序列变成字符串         *也需要用这种编码方式,否则会出现乱码        */        String str1=new String(bytes4);        System.out.print(str1);        String str2=new String(bytes4,"utf-16be");        System.out.print(str2);        /*文本文件就是字节序列,可以是任意编码的字节序列         *如果我们在中文机器上直接创建文本文件,那么该文本文件只认识ANSI编码         *联通、联这是一种巧合,它们正好符合了utf-8编码的规则        */    }}

       运行结果:


       5)因此我们得出了,中文操作系统下,ANSI编码代表GBK编码,gbk编码中文占用2个字节,英文占用1个字节;

utf-8编码中文占用3个字节,英文占用1个字节;这样的话,我们可以查看创建的文本文件的字节大小。


       二File类的使用

       java.io.File类用于表示文件(或者目录),File类只用于表示文件(或者目录)的信息(名称、大小等),不能用于文件内

容的访问。

       File类中的字段有:


       File类的构造方法有:


       File类的方法有:





       (1)创建目录

       实例代码:

import java.io.*;public class FileDemo {public static void main(String[] args) {//了解构造函数的情况查帮助File file = new File("E:\\Java\\JavaSE\\IO\\File");//判断文件是否存在,不存在立即创建;存在的话立刻删除if(!file.exists()){file.mkdir(); //file.mkdirs();}else{file.delete();}//是否是一个目录,如果是目录返回true,如果不是目录或者目录不存在返回的是falseSystem.out.println(file.isDirectory());//是否是一个文件System.out.println(file.isFile());//File file2 = new File("E:\\Java\\JavaSE\\IO日记1.txt");File file2 = new File("E:\\Java\\JavaSE\\IO","日记1.txt");if(!file2.exists()){try{file2.createNewFile();}catch(IOException e) {e.printStackTrace();}}else{ file2.delete();}                //常用的File对象的API        System.out.println(file);//file.toString()的内容System.out.println(file.getAbsolutePath());System.out.println(file.getName());System.out.println(file2.getName());System.out.println(file.getParent());System.out.println(file2.getParent());System.out.println(file.getParentFile().getAbsolutePath());}}

        运行结果:

        运行之前:


         运行之后:


         (2)遍历目录

         实例代码1:

import java.io.*;//列出File的一些常用操作,比如过滤、遍历等操作public class FileUtils{    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 string:filenames){System.out.println(string);}System.out.println();//打印绝对路径for(String string:filenames){System.out.println(dir+"\\"+string);}   }      public static void main(String[] args) throws IOException{   FileUtils.listDirectory(new File("E:\\Java\\JavaSE\\IO"));   }}

         运行结果:


        实例代码2:

import java.io.*;//列出File的一些常用操作,比如过滤、遍历等操作public class FileUtils{    public static void listDirectory(File dir) throws IOException{                //列出指定目录下(包括其子目录)的所有文件                if(!dir.exists()){throw new IllegalArgumentException("目录:"+dir+"不存在");                }if(!dir.isDirectory()){throw new IllegalArgumentException(dir+"不是目录");}//如果想要遍历子目录下的内容就要构造成File对象做递归操作,File提供了直接返回File对象的APIFile[] files=dir.listFiles();//返回的是直接子目录(文件)的抽象if(files!=null&&files.length>0){for(File file:files){if(file.isDirectory()){//递归操作listDirectory(file);}else{System.out.println(file);}}}   }      public static void main(String[] args) throws IOException{   FileUtils.listDirectory(new File("E:\\Java\\JavaSE\\IO"));   }}

        运行结果:


       


1 0
原创粉丝点击