java使用I/O操作文件

一、操作文件或目录属性

关于File的构造方法

方法说明
File(String pathname)用指定的文件路径构造文件
File(String dir,String subpath)在指定的目录下创建指定文件名的路径
File(File parent,String subpath)根据一个文件对象和一个字文件构造文件对象parent参数指定目录文件,subpath参数指定文件名

关于File类的常用方法

方法说明
boolean exists测试文件是否存在
String getAbsolutePath()返回此对象表示的文件的绝对路径
String gerName()返回此对象表示的文件的名称
String gerParent()返回此File对象的路径名的上一级,如果路径名没有上一级,则返回null
boolean delete()删除此对象指定的文件
boolean createNewFile()创建空文件,不创建文件夹
boolean isDirectory测试次File对象表示的是否是目录
boolean mkdir创建一个目录,它的路径名由当前File对象指定
boolean mkdirs包括父目录的目录

使用File类操作文件和目录属性的步骤一般如下
1)引入File类
impot java.io.file
2)创建一个文件对象
File file = new File(“text.txt”)
3)利用访问File类的方法访问文件或目录的属性
file.exists

示例:使用File类创建和删除文件
实现步骤:

  1. 引入File类
  2. 构造一个文件对象
  3. 调用File的方法创建和删除文件
package date;

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

public class Test3 {
    //使用File类创建和删除文件
    public static void main(String[] args) throws IOException {
        Test3 t = new Test3();
        File f = new File("C:\\Users\\86177\\Desktop\\test.txt");
        t.create(f);
//        t.delete(f);

    }

   public void create(File file) throws IOException {
        if (!file.exists()){
            file.createNewFile();
        }
       System.out.println("文件创建成功");
    }

   public void delete(File file) {
        if (file.exists()){
            file.delete();
        }
    }
}

二、认识java的流

概述:

读文件是指把文件中的数据读取到内存中。反之,写文件就是把内存中的数据写到文件中。而流就是来读写文件的。
流是指一连串流动的字符,是以先进先出的方式发送和接收数据的通道
流分为输入流和输出流,输入/输出流是相对于计算机内存来说的,如果数据输入到内存,则称为输入流,反之就是输出流。Java的输出流主要由OutputStream和Write作为基类,而输入流则主要由InputStream和Reader作为基类,,字符流最适合用来处理字符串和文本
在java.io包中,封装了许多输入/输出流的API。在程序中,这些输入/输出流类的对象称为流对象。可以通过这些流对象将内存中的数据以流的方式写入文件,当然也可以通过流对象将文件中的数据以流的方式读取到内存
构造流对象时往往会和数据源(如文件)联系起来。数据源分为源数据源和目标数据源,输入流关联的是源数据源,输出流关联的则是目标数据源。

  • 字节流是8位通用字节流,其基本单位是字节,字节流的基类是InputStream类和OutputStream类,他们是抽象类
  • 字符流是16位Unicode字符流,基本单位是Unicode字符字符流最适合用来处理字符串和文本,他们也是抽象类。

一个被访问的流的基本特征都是通过实现这4个抽象类的方法来建立的。
inputStream类的常用方法

方法说明
int read()从输入流中读取下一个字节数据
int read(byte[] b)从输入流中读取数据,并将数据存储在缓冲区数组b中,返回实际读取的字节数
int read(byte[] b,int off,int len)从输入流中读取最多len长度的字节,保存到字节数组b中,保存的位置从off开始
void close关闭输入流

OutputStream类的常用方法

方法说明
void write(int c)将指定的字节数据写入此输出流中
void write(byte[] buf)将数组buf中的所有字节写入此输出流中
void write(byte[] b,int off,int len)将字节数组中从偏移量off开始的长度为len的字节数据输出到输出流中
void close()关闭输出流

Reader类的常用方法

方法说明
int read()从输入流中读取单个字符,返回所读取的字符数据
int read(byte[] c)从输入流中最多读取c.length个字符,保存到字符数组c中,返回实际读取的字符数
int read(char[] c ,int off,int len)从输入流中读取最多len个字符,保存到字符数组c中,保存的位置从off位置开始,返回实际读取的字符数
void close()关闭流

Write类的常用方法

方法说明
void write(String str)将str字符串里包含的字符输出到指定的输出流中
void write(String str,int off,int len)将str字符串里从off位置开始,长度为len的多个字符输出到输出流中
void close()关闭输出流
void flush()刷新输出流

注意:
1.在操作上字节流与字符流有一个区别,字符流在操作时使用了缓冲区(内部存储器),而字节流在操作时直接操作文件,不会使用缓冲区。
2.所有的这些方法在出现错误时都会出现IOException异常。

三、读写文本文件

通常可以使用java.io包里的流读写文本文件

1.使用字节流读写文本文件

1)使用字节流类FileInputStream读文本文件
FilInputStream称为文件输入流,它是字节输入流InputStream抽象类的一个字类,它的作用是将文件中的数据输入到内部存储器(简称内存)中,可以利用它来读取文本文件中的数据,其具体实现步骤如下:

  1. 导入相关的类
  2. 构造一个文件输入流对象
  3. 利用文件输入流的方式读取文本文件的数据
  4. 关闭文本文件输入流对象

示例:使用FileInputStream类读取文本文件的数据
实现 步骤:
1.引入相关类
2.在一盘中创建目录和文件,并在文件中输入内容
3.创建流对象
4.调用read方法读取数据
5.关闭流对象

import java.io.IOException;

public class Test4 {
    //使用FileInputStream类读取文本文件的数据
    public static void main(String[] args) throws IOException {
        //创建流对象
        FileInputStream f = new FileInputStream("C:\\Users\\86177\\Desktop\\test.txt");
        int data;
        System.out.println("可读取的字节数:"+f.available());
        System.out.print("文件内容为:");
        //循环读数据
        while ((data=f.read())!=-1){
            System.out.print(data+"");
        }
        //关闭流对象
        f.close();
    }
}

注意:
read()方法返回整数,如果读取的是字符串,需进行强制类型转换
流对象使用完毕后需要关闭

2.使用字节流FileOutputStream写文本文件

FileOutputStream称为文件输出流,它是字节输出流OutputStream抽象类的子类。它的作用是把内存中的数据输出到文件中,可以利用它把内存中的数据写入到文本文件中。具体实现步骤如下:

  1. 引入相关的类
  2. 构建一个文件输出流对象
  3. 利用文件输出流的方法把数据写入到文本文件中
  4. 关闭文件输出流

示例:使用FileOutputStream类向文本文件中写入数据
实现步骤:
1.引入相关类
2.创建流对象
3.调用write方法写入数据到文件中
4.关闭流对象

import java.io.FileOutputStream;

public class Test5 {
    //使用FileOutputStream类向文本文件中写入数据
    public static void main(String[] args) {
        try{
            String str = "好好学习Java";
            byte[] words=str.getBytes();//字节数组、
            //创建流对象,以追加方式写入文件
            FileOutputStream f = new FileOutputStream("C:\\Pratice\\jdbc\\src\\doc\\新建文本文档.txt",true);
            //写入文件
            f.write(words,0,words.length);
            System.out.println("文件已经更新");
        } catch (java.io.IOException e) {
            System.out.println("创建文件时出错!");
        }
    }
}

代码FileOutputStream f = new FileOutputStream(“C:\Pratice\jdbc\src\doc\新建文本文档.txt”,true);第二个参数为true,表示在文件末尾添加数据,否则默认情况下,向文件写数据时将覆盖文件中的内容。在写入第二个参数true后,如果文件不存在,程序运行后,将首先创建此文件然后写入数据

注意

1.在创建FileOutputStream实例时,如果相应的文件并不存在,就会自动创建一个空的文件夹
2.如果参数file或name表示的文件路径存在,但是代表一个文件目录,则会抛出FileNotFoundException的异常
3.默认情况下,向文件写数据时将覆盖文件中原有的内容

3.使用字符流读写文本文件

1)使用字符狸奴类BufferedReader和FileReader读写文本文件
BufferReader类和FileReader类都是Reader抽象类的子类,它们可以通过字符流的方式读取文件,并使用缓冲区,提高了读文本文件的效率。读取文本文件的具体步骤如下:

  1. 引入相关的类
  2. 构造一个BufferedReader对象
  3. 利用BufferReader类的方法读取文本文件的数据
  4. 关闭相关的流对象

示例: 使用BufferedReader类和FileReader类读取文本文件的数据
实现步骤
1.引入相关类
2.创建流对象
3.调用readLine()方法读取数据
4.关闭流对象

import java.io.BufferedReader;
import java.io.FileReader;

public class Test6 {
    //使用BufferReader和FileReader类读取文本文件数据
    public static void main(String[] args) {
        //创建一个FileReader对象

        try {
            FileReader    f = new FileReader("C:\\Users\\86177\\Desktop\\test.txt");
            //创建一个BufferReader对象
            BufferedReader b = new BufferedReader(f);
            //读取一行数据
            String line = b.readLine();
            while (line!=null){
                System.out.println(line);
                line=b.readLine();
            }
            //关闭流
            b.close();
            f.close();

        } catch (java.io.IOException e) {
            System.out.println("文件不存在!");
        }


    }
}

2)使用字符流BufferWriter和FileWriter来写文件
BfferedWriter和FileWriter都是字符输出流Writer抽象类的子类,他们可以通过字符流的方式并通过缓冲区把数据写入文件,提高了文件文本的效率。把数据写入文本文件的具体操作步骤如下:

  1. 引入相关的类
  2. 创建一个Buffered对象
  3. 利用BufferedWrite类的方法写文件
  4. 相关流对象的清空和关闭

示例:使用BufferedWriter及FileWriter对象向文本文件中写数据,并将写入文件的数据读取出来显示在控制台上
实现步骤:
1.引入相关类
2.创建流对象
3.调用write方法写入数据
4.调用flush方法刷新缓冲区
5.读取写入的数据
5.关闭流对象

package date;

import java.io.*;

public class Test7 {
    //示例:使用BufferedWriter及FileWriter对象向文本文件中写数据,
    // 并将写入文件的数据读取出来显示在控制台上
    public static void main(String[] args) throws IOException {
        //创建FileWriter对象
        FileWriter f = new FileWriter("C:\\Pratice\\jdbc\\src\\doc\\新建文本文档.txt");
        //创建一个BufferedWriter对象
        BufferedWriter b = new BufferedWriter(f);
        //写入信息
        b.write("大家好!" );
        b.write("我是ig的ad泡芙");
        b.newLine();
        b.write("被0-3我感觉心情还是很开心的");
        b.newLine();
        b.flush();
        b.close();
        f.close();
       //创建一个FileReader对象
        FileReader f1 = new FileReader("C:\\Pratice\\jdbc\\src\\doc\\新建文本文档.txt");
        //创建一个BufferedReader对象
        BufferedReader b1 = new BufferedReader(f1);
        //读取数据
        String l = b1.readLine();
        while (l!=null){
            System.out.println(l);
            l = b1.readLine();
        }
        b1.close();
        f1.close();

    }
}

4.读写二进制文件

1.使用字节流读二进制文件

利用DataInputStream类读取二进制文件,其实与利用FileInputStream类读文本文件及其相似,也要用到FileInputStream类关联二进制文件。具体步骤如下:

  1. 引入相关的类
  2. 构造一个数据输入流对象
  3. 利用数据输入流类的方法读取二进制文件中的数据
  4. 关闭数据输入流
2.使用字节流写二进制文件

利用DateOutputStream类写二进制文件,其实与利用FileOutputStream类写文本文件及其相似,也要用到FilePutputStream类关联二进制文件。具体操作步骤如下:

  1. 引入相关的类
  2. 构造一个数据输出流对象
  3. 利用数据输出流类的方法把数据写入二进制文件
  4. 关闭数据输出流
3.示例:实现从一个二进制文件ReadAndWriteBinaryFile中读取数据,然后复制到另一个二进制文件中

实现步骤:
1.引入相关类
2.创建流对象
3.调用DateInputStream对象的read方法读取数据
4.调用DataOutputStream对象的write方法写数据
5.读取写入的数据
6.关闭流对象

package date;

import java.io.*;

public class Test8 {
    //实现从一个二进制文件ReadAndWriteBinaryFile中读取数据,然后复制到另一个二进制文件中
    public static void main(String[] args) throws IOException {
        //创建流对象,读二进制文件
        FileInputStream f = new FileInputStream("C:\\Pratice\\jdbc\\out\\production\\jdbc\\ChaiFen.class");
        DataInputStream d = new DataInputStream(f);
        //创建流对象,写二进制文件
        FileOutputStream f1 =  new FileOutputStream("C:\\Users\\86177\\Desktop\\hello.class");
        DataOutputStream d1 = new DataOutputStream(f1);
        int temp;
        while ((temp=d.read())!=-1){//读数据
            d1.write(temp);//数据写入
        }
        //关闭流
        f.close();
        d1.close();

    }
}

5.重定向标准I/O

在这里,还有两个特别重要的流,System.in和System.out,他们是java提供的两个标准输入/输出流,主要用于从键盘接受数据以及向屏幕输出数据。

1.System.in常见方法

int read(),此方法从键盘接受一个字节的数据,返回值是该字符的ASCII码
int read(byte []buf),此方法从键盘接收多个字节的数据,保存至buf中,返回值是接收字节数据的个数

2.System.out常见方法

print(),向屏幕输出数据,不换行,参数可以是java的任意数据类型
println(),向屏幕输出数据,换行,参数可以是java的任意数据类型

3.重定向标准I/O解释以及方法

什么是重定向标准I/O:简单的说,就是讲标准I/O重新定向到其他的I/O设备
System类提供了3个重定向标准输入/输出方法

方法说明
static void setErr(printStream err)重定向标准错误输出流
Static void setIn(Inputstream in)重定向标准输入流
Static void setOut(printStream out)重定向标准输出流

代码解释:

//创建printStream输出流
printStream ps = new PrintStream(new FileOutputStream("文件路径"));
//将标准输出流重定向到文件
System.setOut(ps);
//向文件中输出内容
System.out.print("sdifhjsl");
System.out,println(new ReOut());



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值