File使用

File基础应用

import java.io.File;

/*
* java.io.File
* File用来表示硬盘上的一个文件或目录(本质是表示一个抽象路径)
* 作用:
*   访问其表示的文件或目录的属性信息
*   创建和删除文件或目录
*   访问一个目录中的所有子项
* 注意:
*   File不能访问文件数据。
*/
public class FileDemo01 {
    public static void main(String[] args) {
//        File file = new File("D:/idea/items/JsdSe/demofile.txt");     //绝对路径
        File file = new File("./demofile.txt");     //相对路径,其中./表示当前项目目录下

        System.out.println(file.length());      //文件字节数
        System.out.println(file.getName());     //获取文件名字
        System.out.println(file.canRead());     //文件是否可读
        System.out.println(file.canWrite());    //文件是否可写
        System.out.println(file.isHidden());    //文件是否隐藏
    }
}

创建文件

createNewFile()方法

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

/*
* 创建文件
*/
public class CreatNewFileDemo {
    public static void main(String[] args) throws IOException {
        File file = new File("./test.txt");

        if (file.exists()) {        //判断文件是否存在
            System.out.println("文件已存在");
        }else {
            file.createNewFile();       //创建文件
            System.out.println("创建成功");
        }
    }
}

删除文件

delete()方法

import java.io.File;

/*
* 删除文件
*/
public class DeleteFileDemo {
    public static void main(String[] args) {
        File file = new File("./test.txt");

        if (file.exists()) {        //判断文件是否存在
            file.delete();
            System.out.println("删除成功");
        }else {
            System.out.println("文件不存在");
        }
    }
}

创建目录

mkdir()方法

import java.io.File;

/*
* 创建目录
*/
public class MkDirDemo {
    public static void main(String[] args) {
        //File file = new File("iml");
        File file = new File("iml/impl/impo");

        if (file.exists()) {
            System.out.println("目录已存在");
        }else {
        	/*
            * mkdir()创建目录是要求该目录所在的目录必须存在,否则无法创建
            * mkdirs()创建目录时会将所有不存在的父目录一同创建出来,推荐使用.
            */
//            file.mkdir();       //创建目录
            file.mkdirs();      //创建所有不存在的目录
            System.out.println("目录创建成功");
        }
    }
}

访问目录所有子项

import java.io.File;
import java.io.FileFilter;

/*
* 访问一个目录中所有子项
*/
public class ListFilesDemo {
    public static void main(String[] args) {
        File file = new File("./src/main/java/com/example/filetest");

        extracted2(file);

    }

    private static void extracted2(File file) {
        if (file.isDirectory()) {
        	/*
            * 过滤器
            */
            FileFilter filter = (File pathname)->{
                return pathname.getName().contains("M");
            };

            File[] files = file.listFiles(filter);
            System.out.println(files.length);
            for (File f:files
                 ) {
                System.out.print(f.getName() + " ");
            }
        }
    }

    private static void extracted1(File file) {
        /*
         * 查询该目录下有多少个子项
         */
        File[] files = file.listFiles();
        System.out.println(files.length);
        for (File f:files
        ) {
            System.out.print(f.getName() + " ");
        }
    }

    private static void extracted(File file) {
        if (file.isDirectory()) {       //判断是否为目录
//            System.out.println(file.getName() + "是一个目录");

			/*
            * 过滤器
            */
            FileFilter filter = new FileFilter() {
                @Override
                public boolean accept(File pathname) {
                    /*
                     * getName()获取经过过滤器元素的名字,
                     * indexOf("F")判断是否有F
                     */
//                    return pathname.getName().indexOf("F") != -1;
                    return pathname.getName().contains("F");
                }
            };

            /*
             * 查询该目录下有多少个子项
             */
            File[] files = file.listFiles(filter);
            System.out.println(files.length);
            for (File f:files
            ) {
                System.out.print(f.getName() + " ");
            }
        }
    }
}

I/O流

I/O流

输出流写文件

import java.io.FileOutputStream;
import java.io.IOException;

/*
* Java IO
* I:INPUT 输入
* O:OUTPUT 输出
* Java用方向输入与输出划分读写操作,其中输入用来读取,输出用来写入
* java.io.InputStream   输入流,是所有输入流的超类,定义了读取字节的相关方法
* java.io.OutputStream  输出流,是所有输出流的超类,定义了写出字节的相关方法。
*
* 文件流:
*   java.io.FileInputStream     继承自InputStream
*   java.io.FileOutputStream    继承自OutputStream
*   是专门用来连接程序与文件直接爱你的管道,用来读写文件数据的流
*/
public class FosDemo {
    public static void main(String[] args) throws IOException {
        /*
        * 向文件写入字节
        */
        FileOutputStream fos = new FileOutputStream("./fos.dat");
        /*
        * java.io.OutputStream定义写操作
        *   void write(int d)
        *   出一个字节,写出的给定的int值对应的2进制的低8位
        */
        fos.write(1);
        System.out.println("写出完毕");
        fos.close();        //关闭流

    }
}

输入流读文件

/*
* 用文件输入流读取文件数据
*/
public class FisDemo {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("./fos.dat");
        /*
        * java.io.FileInputStream定义了读取字节方法
        * read()读取一个字节(8位2进制),以int型表示(将读取的字节存入该int值最低八位上),
        * 并将其返回.如果返回的int值表示整数-1则表示流读取到了末尾.
        * 读取到的数据存在低8位上,高8位2进制全部补0
        */
        int r1 = fis.read();        //读取第一个字节
        int r2 = fis.read();        //再次调用读取第二个字节,如果没有字节则输出-1
        System.out.println(r1+" "+r2);

        fis.close();
    }
}

文件复制

单字符复制

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/*
* 文件复制
*/
public class CopyDemo {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("./310792.jpg");
        FileOutputStream fos = new FileOutputStream("./image.jpg");
        int rs;
        long start = System.currentTimeMillis();        //读取运行开始的时间

        while ((rs = fis.read()) != -1) {//判断文件是否结束
            fos.write(rs);          //将读取出来的字节复制给新文件
        }

        long end = System.currentTimeMillis();      //读取运行结束的时间
        System.out.println("复制完成" + " " + (end-start));
        fis.close();    //关闭流
        fos.close();

    }
}
public class TimeDemo {
    public static void main(String[] args) {
        /*
        * long返回的是1970年1月1日0时0分0秒后的毫秒值
        */
        long now = System.currentTimeMillis();
        System.out.println(now);
        System.out.println(now/1000/60/60/24/365 + 1970);
    }
}

块读写

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/*
* 在InputStream  OutputStream两个超类上定义了块读写操作
*   在InputStream上定义的快读取:
*       int read(byte[] data)
*           一次性将给定所有数读出
*   在OutputStream上定义的快写操作:
*       int read(byte[] data)
*           一次性将给定所有数写入
*       void write(byte b[], int off, int len)
*           一次性将给定的字节数组data从下标off连续读取len个数据写入
*
*/
public class CopyDemo2 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("./310792.jpg");
        FileOutputStream fos = new FileOutputStream("./image.jpg");
        byte[] data = new byte[1024*10];      //声明一个10240的字节数组      10kb
        int rs;     //每次实际读取到的字节量

        long start = System.currentTimeMillis();        //读取运行开始的时间
        while ((rs = fis.read(data)) != -1){
            fos.write(data,0, rs);
        }

        long end = System.currentTimeMillis();      //读取运行结束的时间
        System.out.println("Copy成功" + " " + (end-start));
        fis.close();
        fos.close();

    }
}

向文本中写入文本数据

简易记事本
转换流

import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

/*
* 向文本中写入文本数据
*/
public class WriteStringDemo {
    public static void main(String[] args) throws IOException {
        /*
        * 文件流的构造器
        * FileOutputStream(String name)     FileOutputStream(File file)
        * 以上两个构造器创建文件流时,为“覆盖模式”
        * 特点:
        *   如果指定文件不存在会自动创建
        *   如果文件存在,该文件会自动清除所有数据,然后将通过这个流写出的数据全部保留在文件当中
        * FileOutputStream(String name, boolean append)
        *   当append为true时,文件流采取追加模式
        * 特点:
        *   如果指定文件不存在会自动创建
        *   如果文件存在,该文件会保留之前数据,然后将通过这个流写出的数据全部追加在之前数据后
        *       将其保留在文件当中
        */
        FileOutputStream fos = new FileOutputStream("./demofile.txt",true);

        /*
        * UTF-8     万国码
        * 英文,数字,符号每个字符各占2个字节
        * 中文每个字符占3个字节
        * getBytes()
        *   将一组字符串转换成一组字节
        */
//        String line = "这是中文写入文本测试";
//        byte[] bytes = line.getBytes(StandardCharsets.UTF_8);       //将String转为UTF-8编码
//        fos.write(bytes);

        fos.write("这是第二次中文写入文本测试".getBytes(StandardCharsets.UTF_8));

        System.out.println("写入成功");

        fos.close();

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值