java的文件处理及IO流入门

该博客主要介绍Java文件操作相关知识。包括Java文件类File,它是JDK6及以前访问文件和目录的方式,不涉及文件内容,只涉及属性,Java 7的nio包是对其补充;还讲解了Java IO包,文件读写以流的形式进行,介绍了节点类和包装类;此外,还提及二进制文件和zip类的读写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java文件类file

jdk6及以前,唯一的访问文件及目录的方式:java.io.file
file类与os无关,但会受到os权限控制
file类不涉及到文件具体内容,只涉及到属性

方法名用法
isDirectory是否是目录
isFile是否是文件
getName获取文件名字
getParent获取上一层目录路径
getPath获取这个文件的全路径
length获取文件的大小
lastModified返回文件最后一次修改时间
listFiles列出当前目录的所有子文件,但不包括子目录下的文件,即不会递归显示;
delete删除文件或者目录

java 7提出了nio包,对java.io.file类的补充,包括复制,移动,相对路径,递归遍历等

java IO包

java读写文件,只能以流(数据流)的形式进行读写,因为文件很大,没有那么大的内存

java.io包中
节点类
包装类

1 Byte(字节)= 8 Bits (位) 即 00000000 — 11111111

节点类:直接操作文件类
-InputStream,OutputStream(字节)
FileInputStream,fileoutputstream

-reader,writer(字符)
filereader,filewriter

jdk 1.6 和 jdk 1.7的写法
写文件代码:

 public static  void  writefile()  {
        String path = "C:\\\\Users\\\\Administrator\\\\Desktop\\\\abc.txt";
        try(BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path)))) {
                    bw.write("123123");
                    bw.newLine();
                    bw.write("hehehe");
                    bw.newLine();
        } catch (IOException e){
            e.printStackTrace();
        }
//        FileOutputStream fos = null; //节点类,负责写字节
//        OutputStreamWriter osw = null; //转化类,负责字符到字节的转换
//        BufferedWriter bw = null; //装饰类,负责写字符到缓冲区
//        try {
//            fos = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\abc.txt"); //往哪个文件写
//            osw = new OutputStreamWriter(fos,"utf-8"); //用什么编码去写
//            bw = new BufferedWriter(osw); //添加一个缓冲区
//
//            bw.write("这是一个悲伤的故事");
//            bw.newLine();//换行
//            bw.write("over");
//            bw.newLine();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }   finally {
//            try {
//                bw.close();
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
    }

读文件:

 public static void readfile() {
//        FileInputStream fis = null;
//        InputStreamReader isr = null;
//        BufferedReader br = null;
//        try {
//            String path = "C:\\\\Users\\\\Administrator\\\\Desktop\\\\abc.txt";
//            fis = new FileInputStream(path);
//            isr = new InputStreamReader(fis);
//            br = new BufferedReader(isr);
//            String line;
//            while ((line = br.readLine()) != null) {
//                System.out.println(line);
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        } finally {
//            try {
//                br.close();
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }
            String path = "C:\\\\\\\\Users\\\\\\\\Administrator\\\\\\\\Desktop\\\\\\\\abc.txt";
            String line;
            try(BufferedReader in = new BufferedReader((new InputStreamReader(new FileInputStream(path))))){
                while ((line = in.readLine()) != null){
                    System.out.println(line);
                }
            }catch (Exception e){
                e.printStackTrace();
            }
    }

二进制文件读写

读:

 public static void  readFile1(){
        String path = "C:\\Users\\Administrator\\Desktop\\abc.txt";
            try (DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(path)))){
                String a,b;
                int c,d;
                a=dis.readUTF();
                c=dis.readInt();
                d=dis.readInt();
                b=dis.readUTF();
                System.out.println(a);
                System.out.println(b);
                System.out.println(c);
                System.out.println(d);
            }catch (Exception e){
                e.printStackTrace();
            }
    }

 public static void writeFile(){
        FileOutputStream fos = null;
        DataOutputStream dos = null;
        BufferedOutputStream bos = null;
        try {
            String path ="C:\\Users\\Administrator\\Desktop\\abc.txt";
            fos = new FileOutputStream(path);
            bos = new BufferedOutputStream(fos);
            dos = new DataOutputStream(bos);
            dos.writeUTF("a");
            dos.writeInt(20);
            dos.writeInt(180);
            dos.writeUTF("b");
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                dos.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

zip类的读写

java.until.zip
压缩

public static void singleZip() throws IOException {
        File file = new File("C:\\Users\\Administrator\\Desktop\\timg.jpg");
        File zipfile = new File("C:\\Users\\Administrator\\Desktop\\abc.zip");
        InputStream input = new FileInputStream(file); //定义文件的输入流
        ZipOutputStream zipOut = null; //声明压缩流对象
        zipOut = new ZipOutputStream(new FileOutputStream(zipfile));
        zipOut.putNextEntry(new ZipEntry(file.getName()));//设置ZipEntry对象
        zipOut.setComment("single file zip");//设置注释
        //压缩过程
        int temp = 0;
        while ((temp=input.read())!=-1){ //读取文件
            zipOut.write(temp); //压缩输出
        }
        input.close();
        zipOut.close();
    }

解压缩

  public static void unzips() throws IOException{
        File file  = new File("C:\\Users\\Administrator\\Desktop\\abc.zip");
        File outFile = null;
        ZipFile zipFile = new ZipFile(file);
        ZipInputStream zipinput = null;

        //定义解压的文件名
        OutputStream out = null; //定义输出流,用域输出的每一个实体内容
        InputStream input =null;//定义输入流,读取没有给zipentity;
        ZipEntry entry =null;//每一个压缩实体
        zipinput = new ZipInputStream(new FileInputStream(file));

        //遍历压缩包中的文件
        while  ((entry = zipinput.getNextEntry())!=null){
            System.out.println("解压缩"+entry.getName()+"文件");
            outFile = new File("C:\\Users\\Administrator\\Desktop\\"+entry.getName());//定义输出的文件路径
            if(!outFile.getParentFile().exists()){
                outFile.getParentFile().mkdirs();
            }
            if(!outFile.exists()){
                if(entry.isDirectory()){
                    outFile.mkdirs();
                }else{
                    outFile.createNewFile();
                }
            }
            if(!entry.isDirectory()){
                input = zipFile.getInputStream(entry);
                out = new FileOutputStream(outFile);
                int temp =0;
                while ( (temp = input.read())!=-1){
                    out.write(temp);
                }
                input.close();
                out.close();

            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李卓书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值