第十一章 文件处理(IO)(上)

1.练习回顾

 INut:

public interface INut {
    String effect();
}

Walnut:

public class Walnut implements INut{
    @Override
    public String effect() {
        return "吃核桃补脑";
    }
}

Almond:

public class Almond implements INut{
    @Override
    public String effect() {
        return "吃杏仁止咳润肺";
    }
}

ITool:

public interface ITool {
    void knock(INut nut);
}

Hammer:

public class Hammer implements ITool{
    @Override
    public void knock(INut nut) {
        System.out.println("用锤子敲开坚果,"+nut.effect());
    }
}

Stone:

public class Stone implements ITool{
    @Override
    public void knock(INut nut) {
        System.out.println("用石头敲开坚果,"+nut.effect());
    }
}

Person:

public class Person {
    private ITool iTool;
    public void eat(INut nut){
        iTool.knock(nut);
    }
    public void setiTool(ITool iTool) {
        this.iTool = iTool;
    }
}

Test:

public class Test {
    public static void main(String[] args) {
        Person p = new Person();
        Walnut hetao = new Walnut();
        Almond xingren = new Almond();
        ITool t1 = new Stone();
        ITool t2 = new Hammer();
        p.setiTool(t1);
        p.eat(hetao);
        p.eat(xingren);

        p.setiTool(t2);
        p.eat(hetao);
        p.eat(xingren);
    }
}

2.文件对象的使用

        File:文件对象,用于表示磁盘上的文件夹或数据文件。

方法或常量类型描述
public File(String filename)构造方法创建File类对象并传入完整路径
public boolean createNewFile()
方法创建新文件
public boolean delete()
方法删除文件
public boolean exists()方法判断文件是否存在
public boolean isDirectory()方法判断给定的路径是否为目录
public long length()方法返回文件的大小
public String[ ] list()方法列出指定目录的全部内容,只列出名字
public File[ ] listFiles()方法列出指定目录的全部File对象
public boolean mkdirs()方法创建目录
public boolean renameTo(File dest)方法为已有的文件重命名

2.1文件的基本操作

public class Test {
    public static void main(String[] args) throws IOException {
        //文件对象:数据文件,目录文件
        //File file0 = new File("E:/Desktop/mu.txt");
        //File.separator:路径分隔符 (根据操作系统改变)
        File file0 = new File("E:"+File.separator+"Desktop"+File.separator+"mu.txt");
        //判断文件是否存在
        if(!file0.exists()){
            //在该目录下创建文件,如果目录不正确会报错(IOException: 系统找不到指定的路径。)
            file0.createNewFile();
        }else{
            //删除文件
            //file0.delete();
        }
        //文件大小,
        System.out.println(file0.length());
        //是否为目录文件
        System.out.println(file0.isDirectory());
        //是否是数据文件
        System.out.println(file0.isFile());
        //文件名
        System.out.println(file0.getName());
        //文件路径
        System.out.println(file0.getPath());

        //文件属性:是否 可读、可写、可执行
        System.out.println(file0.canRead());
        System.out.println(file0.canWrite());
        System.out.println(file0.canExecute());



    }
}
public class Test2 {
    public static void main(String[] args) throws IOException {
        File f = new File("e:/qqq/iii/ppp");
        File f2 = new File("e:/qqq/iii/ppp/xxx.txt");

        if(!f.exists()){
            //创建多级目录
            f.mkdirs();
            //创建文件
            f2.createNewFile();
        }else {
            //删除文件
            
            f2.delete();
            
            f.delete();
        }
    }
}

2.3 文件的遍历/递归遍历

public class Test1 {
    public static void traverseFile(File file,int n){
        for (int i=0;i<n;i++){
            System.out.print("     |- ");
        }
        if(!file.isDirectory()){
            n=0;
            System.out.println(file.getName()+" ");
        }else{
            n++;
            System.out.println(file.getName()+"<DIR>");
            String[] names = file.list();
            for (String f : names){
                File file1 = new File(file.getPath()+File.separator+f);
                traverseFile(file1,n);
            }
        }
    }
    public static void main(String[] args) {
        File file  = new File("E:/Desktop/iotest");
        traverseFile(file,0);
    }
}

3.IO数据流的使用

: 水流(有方向,有基本的构成单位:水滴),车流(有方向,基本单位:车);
数据流 :以字节或字符为单位按特定的方向传送就构成了数据流。

3.1 流的分类

 3.2 输入输出字节流的使用

 

 3.2.1 输入字节流

抽象类:InputStream 程序可以从目标中连续读取字节的对象称为字节输入流
实现类:FileInputStream

方法描述
public void close()关闭输入流
public abstract int read()以数字的方式读取内容
public int read(byte[ ] b)将内容读到byte数组中,同时返回读入的个数

3.2.2 输出字节流

抽象类:OutputStream 程序可以向其中连续写入字节的对象称为字节输出流
实现类:FileOutputStream
方法描述
public void close()关闭输出流
public abstract void write(int b)
在数据流中写入一个字节
public void write(byte[] b,int off,int len)
在数据流中写入一个指定范围的byte组
public void write(byte[] b)
在数据流中写入一个byte数组
public void flush()
刷新缓冲区

 3.2.3 流的使用步骤

public class Test {

    //将程序中(内存)的数据写到文件中
    public static void  w() throws IOException {
        //定义文件对象,关联到一个磁盘文件
        File file =new File("d:/yzh7.txt");
        //创建文件字节输出流对象:可以配置一个追加方式的boolean值
        OutputStream os = new FileOutputStream(file,true);
        //通过文件输出流对象,写数据到文件中
        String s = "abcdef";
        os.write(s.getBytes());
        //关闭流对象
        os.close();
    }

    //将文件中的数据读取到程序中(内存)
    public static void r() throws IOException {
        //创建文件对象,关联一个磁盘文件
        File file = new File("d:/yzh7.txt");
        //创建文件输入字节流对象
        //InputStream is = new FileInputStream("d:/yzh7.txt");
        InputStream is = new FileInputStream(file);
        //通过输入流对象,读取文件内容
        //定义字节数组,用于存储读入的内容
        byte[] bs = new byte[10];
        //读取数据,并返回读取个数。如果读取不到数据时,会返回-1
        int count = is.read(bs);
        System.out.println("读取的数据长度:"+count);
        //读取的内容
        /*for (byte b : bs){
            System.out.println(b);
        }*/
        //将读取的内容构建成字符串
        String s = new String(bs,0,count);
        System.out.println(s);
        //关闭流对象
        is.close();
    }

    public static void main(String[] args) throws IOException {
        //调用写文件的方法
        w();

        //r();
    }
}
public class Test2 {
    public static void main(String[] args) {
        //String s = "abcdef";
        //通过字符串获取字符串中字符对应的字节数组
        /*byte[] bs = s.getBytes();
        for (byte b : bs){
            System.out.println(b);
        }*/

        //将字节数组,转为字符串
        byte[] bs = {101,102,103,104,105,106};
        //将字节数组中,从指定位置开始,指定长度的内容,转为字符串
        String str = new String(bs,2,2);
        System.out.println(str);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值