[学习笔记] Java面向对象之File IO

# 学习 # · 2020-07-03

操作文件或目录的属性

1、Java API:java.io.File类。

//引入相关类
import  java.io.*;

2、创建File对象:

File file = new File("D:\\myDoc\\hello.txt");

3、File类的常用方法:

(1)显示文件信息

public void showFileInfo(File file){
    if(file.exists()){        //exists():判断文件或目录是否存在
        if(file.isFile()){        //isFile():判断是否是文件
            System.out.println("名称:" +  file.getName());        //getName():返回文件或文件夹的名称
            System.out.println("相对路径: " + file.getPath());        //getPath():返回文件或文件夹的相对路径
            System.out.println("绝对路径: " + file.getAbsolutePath());        //getAbsolutePath():返回文件或文件夹的绝对路径
            System.out.println("文件大小:" + file.length() + " 字节");        //length():返回文件或文件夹的长度,单位为字节, 如果文件不存在,则返回 0L
        }
        if(file.isDirectory()){        //isDirectory():判断是否是目录
            System.out.println("此文件是目录");
        }
    } else {
        System.out.println("文件不存在");
    }
}

(2)创建文件方法:

public void create(File file){
    if(!file.exists()){
        try {
            file.createNewFile();        //createNewFile():创建名称的空文件,不创建文件夹
            System.out.println("文件已创建!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

(3)删除文件方法:

public void delete(File file){
    if(file.exists()){
       file.delete();        //delete():删除此对象指定的文件或目录
       System.out.println("文件已删除!");
    }
}

Java的流

1、流:指一连串流动的字符,是以先进先出方式发送信息的通道

2、Java流的分类:

(1)流向区分:

  ①输入流:OptputStream(字节输入流)和Writer(字符输入流)作为基类

  ②输出流:InputStream(字节输出流)和Reader(字符输出流)作为基类

(2)处理数据单元划分:

  ①字节流:8位通用字节流

  ②字符流:16位Unicode 字符流


读写文本文件

1、使用字节流读写文本文件:

//引入相关类
import java.io.*;

public class Demo {
    public static void main(String[] args) {
        //构造文件输入流对象和文件输出流对象
        FileInputStream fis = null;
        FileOutputStream fos = null;

        try {
            fis = new FileInputStream("old.txt");
            fos = new FileOutputStream("new.txt",true);

            //创建中转站数组,存放每次读取的内容
            byte[] words = new byte[1024];

            //获取文件可读取的字节数
            System.out.println("可读取的字节数为:" + fis.available() + ",文件内容如下:");

            //通过循环实现文件读取
            while((fis.read(words))!=-1){
                //read方法读取
                fis.read(words);
                //write方法写入
                fos.write(words, 0, words.length);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //关闭流对象
            try {
                fos.close();
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

(1)read()方法返回整数,若读取是字符串,则需要强制类型转换。

(2)创建FileOutputStream实例时,如果相应的文件并不存在,则会自动创建一个空的文件

2、使用字符流读写文本文件:

//引入相关类
import java.io.*;

public class Demo {
    public static void main(String[] args) {
        //创建FileWriter对象
        FileWriter fw = null;
        //创建BufferedWriter对象
        BufferedWriter bw = null;

        //创建FileReader对象
        Reader fr = null;
        //创建BufferedReader对象
        BufferedReader br = null;

        try {
            fw = new FileWriter("D:\\myDoc\\hello.txt");
            bw = new BufferedWriter(fw);
            bw.write("大家好!");
            bw.write("我正在学习BufferedWriter。");
            bw.newLine();
            bw.write("请多多指教!");
            bw.newLine();    //插入换行符
            bw.flush();        //刷新输出流

            //读取文件内容
            fr = new FileReader("D:\\myDoc\\hello.txt");
            br = new BufferedReader(fr);
               String line = br.readLine();
            while(line != null){
                System.out.println(line);
                line = br.readLine();
            }
        } catch(IOException e) {
            System.out.println("文件不存在!");
        } finally {
            try {
                //关闭流对象
                fw.close();
                br.close();
                fr.close();
             } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

二进制文件的读写
//引入相关类
import java.io.*;

public class Demo {
    public static void main(String[] args) {
        DataInputStream dis = null;
        DataOutputStream out = null;
        try {
            //创建输出流对象
            FileInputStream fis = new FileInputStream("D:\\myDoc\\FileCopy.class");
            dis = new DataInputStream(fis);

            //创建输入流对象
            FileOutputStream outFile = new FileOutputStream("D:\\myDoc\\temp.class");
            out = new DataOutputStream(outFile);

            int temp;

            //读取文件并写入文件
            while ((temp = dis.read()) != -1) {
                out.write(temp);
            }
        }catch (IOException ioe) {
            ioe.printStackTrace();
        }finally{
            try{
                dis.close();
                out.close();
            }catch(IOException ex){
                ex.printStackTrace();
            }
        }
    }
}
如无特殊说明,本博所有文章均为博主原创。

如若转载,请注明出处:一木林多 - https://www.l5v.cn/archives/32/

评论