java--IO流

2022-07-28,

1、File类(文件)

一个File类对象可以表示具体的一个文件。
(1)创建文件
创建文本文件:如果文件不存在则创建,存在则创建失败;
创建单个文件夹:同上;
创建多级文件夹:同上。

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

public class Filedemo1 {
    public static void main(String[] args) {
        try {
            File file=new File("D:\\AI\\x9504.txt");
            boolean flag1=file.createNewFile();//创建一个新的普通文件
            System.out.println(flag1?"创建成功":"创建失败");
            //创建一个文件夹
            File file1=new File("D:\\AI\\x9505_java");
            boolean flag2=file1.mkdir();
            System.out.println(flag2?"文件夹创建成功":"文件夹创建失败");
            //上述两个方法 createNewFile 、mkdir 文件(夹)存在则不创建新的 不存在才会创建
            //创建多级文件
            File file2=new File("D:\\AI\\x9504_java\\html");
            boolean flag3=file2.mkdirs();
            System.out.println(flag3?"多级文件夹创建成功":"多级文件夹创建失败");

        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

(2)删除文件

import java.io.File;
public class Filedemo2 {
    public static void main(String[] args) {
        File file1=new File("D:\\AI\\x9504.txt");
        boolean flag1=file1.delete();
        System.out.println(flag1?"删除成功":"删除失败");
    }
}

(3)查询文件
判断指定路径名的文件是否存在;
获取文件的大小;
获取文件名;
获取文件路径。
String字符串:length(),是方法,返回字符串中字符的个数;
数组: 数组名.length 是属性,获取数组中元素的个数;
集合: 集合对象名.size()是方法,返回集合中元素的个数;
文件:文件名.length() 是方法,返回文件中的 字节数 文件的大小。
类名.方法名

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

public class Filedemo2 {
    public static void main(String[] args) {
        try {
//            File file1=new File("D:\\AI\\x9504.txt");
//        boolean flag1=file1.delete();
//        System.out.println(flag1?"删除成功":"删除失败");
            File file1=new File("D:\\AI\\x9504");
            boolean flag1=file1.exists();//判断某个文件(夹)是否存在
            if(flag1){
                System.out.println("您的文件已经存在不需要创建");
            }else {
                file1.mkdir();
            }
            //获取文件的大小 字节
            File file2=new File("D:\\AI\\x9505.txt");
            file2.createNewFile();
            long leg=file2.length();
            System.out.println("size="+leg);
            //返回文件名 和文件路径
            String filename=file2.getName();
            System.out.println("filename="+filename);
            String path=file2.getPath();
            System.out.println(path);
            String path1=file2.getAbsolutePath();
            System.out.println(path1);
        }catch (IOException e){
            e.printStackTrace();
        }
//
    }
}

(4)递归
递归:方法自己调用自己(易出现死循环,所以要控制好基础条件)。
isDirectory() 判断文件是否是文件夹
listFiles() 查询某个文件夹下的所有文件

/**
 *递归 找出某个文件夹下的所有文件
 */

import java.io.File;
public class FileDemo3 {
    public static void showFile(String pathname){
        File file1=new File(pathname);
        //判断文件是否是文件夹
        boolean flag1=file1.isDirectory();
        if(flag1){//是文件夹
            //选择某个文件夹下所有文件
            File[] files=file1.listFiles();
            //for(数据类型 变量名:数组/集合)
            for(File tempfile:files){
                boolean flag2=tempfile.isDirectory();
                if(flag2){
                    showFile(tempfile.getPath());
                }else {
                    String filepath=tempfile.getPath();
                    System.out.println("普通文件:"+filepath);
                }
            }
        }else {
            System.out.println("文件不是文件夹");
            String filepath=file1.getPath();
            System.out.println("普通文件:"+filepath);
        }
    }
    public static void main(String[] args) {
        FileDemo3.showFile("D:\\AI\\工作报告");
    }
}

2、IO流:输入输出流

1、字节流: 可以读取一切文件。

  • 字节输入流:从键盘\文本文件读入程序
  • InputStream(字节输入流祖宗类)
    FileInputStream(子类 文件字节输入流)
    BufferedInputStream(子类 字节缓冲输入流)
  • 字节输出流:从程序输出的
  • OutputStream
    FileOutputStream
    BufferedOutputStream
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class FileInputStream_demo1 {
    public static void main(String[] args) {
        try{
            //input 读 从文件读入程序
            //FileInputStream fis=new FileInputStream("D:\\AI\\x9505.txt");
            File file=new File("D:\\AI\\x9505.txt");
            if(file.exists()&&file.length()>0) {
                //文件字节输入流 从文件一个字节一个字节读数据  读中文乱码 中文字符至少占2个字节
                FileInputStream fileInputStream = new FileInputStream(file);
//                int ch = fileInputStream.read();
                //返回值-1 代表读到头了
//                System.out.println((char)ch);
                int ch=0;
                while ((ch=fileInputStream.read())!=-1){
                    System.out.println((char)ch);
                }
                //3、关闭流
                fileInputStream.close();
            }
        }
        catch (Exception e){
            System.out.println("FileNotFoundException");
        }
    }
}
import java.io.FileOutputStream;

public class FileOutputStream_demo2 {
    public static void main(String[] args) {
        try {
            //output 写 从程序写入文件里
            String data="hello html,hello ps";
            FileOutputStream fos = new FileOutputStream("D:\\AI\\x9504.txt");
            //字符串变字节数组
            byte[] bytes=data.getBytes();
            //如果文件不存在则会自动创建 存在则清空文件在写入(覆盖)
            //FileOutputStream fos = new FileOutputStream("D:\\AI\\x9504.txt",true);追加
            //如果append参数为true咋追加,否则覆盖。
            fos.write(bytes);
            fos.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class IO_demo3 {
    public static void main(String[] args) {
        try {
            FileInputStream fis=new FileInputStream("D:\\AI\\x9505.txt");
            FileOutputStream fos = new FileOutputStream("D:\\AI\\x9504.txt");
            int ch=0;
            while ((ch=fis.read())!=-1){
                fos.write(ch);
            }
            fis.close();
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
import java.io.*;

public class demo2 {
    public static void main(String[] args) {
        try {
            long startTime=System.currentTimeMillis();
            InputStream fis=new FileInputStream("D:\\AI\\x9504.txt");
            OutputStream fos=new FileOutputStream("D:\\AI\\x9505.txt");
            BufferedInputStream bis =new BufferedInputStream(fis);
            BufferedOutputStream bos=new BufferedOutputStream(fos);
            byte[] car=new byte[1024];
            int len=0;
            while((len=bis.read(car))!=-1){
                //System.out.println(len);
                bos.write(car,0,len);
            }
            bis.close();
            bos.close();
            long endTime=System.currentTimeMillis();
            System.out.println("spend time:"+(endTime-startTime)+"ms");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

2、字符流: 读取纯文本文件比较方便,已经帮我们处理的中文乱码问题。

  • FileReader 字符输入流
  • FileWriter 字符输出流
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;

public class ReaderDemo {
    public static void main(String[] args) {
      //  "D:\\AI\\x9504.txt"
        try {
            FileReader fr = new FileReader("D:\\\\AI\\\\x9504.txt");
            FileWriter fw = new FileWriter("D:\\\\AI\\\\x9505.txt");
            char[] car=new char[1024];
            int len=0;
            while((len=fr.read(car))!=-1){
                //char数组转字符串
               // String string = new String(car,0,len);
               // System.out.println(string);
                fw.write(car);
                //fw.write(string);
            }
            fr.close();
            fw.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

本文地址:https://blog.csdn.net/weixin_39274067/article/details/109559748

《java--IO流.doc》

下载本文的Word格式文档,以方便收藏与打印。