Java 输入输出流

获取文件和目录的属性

在Java语言中,提供了获取和修改文件/目录属性的类java.io.File。File类的使用是与平台无关的,适用于不同的文件系统。在程序中,通过创建File类的对象来代表一个文件或目录,利用这个对象可以对文件或目录的属性进行有关操作。

File类的主要方法和说明

方法说明
File(String pathname)将给定路径名字字符串转换为抽象路径名来创建新的File实例
boolean exists()判断File对象对应的文件或目录是否存在
File getAbsoluteFile()获取File对象对应的绝对路径名形式
String getAbsolutePath()获取File对象对应的绝对路径名字符串
String getName()获取File对象表示的文件或目录的名称
boolean isAbsolute()判断File对象对应的抽象路径名是否为绝对路径名
boolean isDirectory()判断File对象代表的是否是一个目录
boolean isFile()判断File对象代表的文件是否是一个标准文件
boolean isHidden()判断File对象代表的文件是否是一个隐藏文件
long lastModified()获取File对象代表的文件最后一次被修改的时间
long length()获取File对象代表的文件的长度
String[] list()获取File对象对应的目录中的文件和目录列表
package 获取文件和目录的属性;
import java.io.File;
/**
 * <p>
 *
 * </p>
 *
 * @autor:lzj
 * @date:2021/8/25
 */
public class Demo01 {
    public static void main(String[] args) {
        String filename = "D:\\All workspaces\\idea-workspace\\JavaSE\\输入输出流\\src\\获取文件和目录的属性\\testFile";//filename的绝对路径
        File f1 = new File(filename);
        System.out.println(filename+"是否存在:"+f1.exists());
        System.out.println(filename+"是文件吗:"+f1.isFile());
        System.out.println(filename+"最后的修改时间:"+f1.lastModified());
        System.out.println(filename+"文件大小:"+f1.length());

        String direname = "D:\\All workspaces\\idea-workspace\\JavaSE\\输入输出流\\src\\获取文件和目录的属性\\testDire";
        File f2 = new File(direname);
        System.out.println(direname+"的绝对路径:"+ f2.getAbsolutePath());
        if(f2.isDirectory()){
            String[] fileList = f2.list();
            System.out.println(direname+"目录中的文件和目录包括:");
            for (int i = 0; i < fileList.length; i++) {
                System.out.print(fileList[i]+" ");
            }
        }
    }
}

Java中的IO流

IO流的概念

  • 流(stream)是一组有序的数据序列。根据流的流动方向,可以分为输入流输出流,根据流动的内容,可以分为字节流字符流
  • 输入流的指向称为,程序从指向源的输入流中读取数据。当程序开始读数据时,就会打开一个通向数据源的流,这个数据源可以是文件、内存或网络。例如:在程序中需要从文件a中读取数据,此时文件a就是数据源,在程序和文件a间的管道称为流,因为数据是从文件流向程序,所以称为输入流
  • 输出流的指向是字节/字符流向的地方,程序通过向输出流中写入数据把信息传递到目的地。当程序需要写入数据时,就会打开一个流向目的地的流。例如:在程序中需要把一些数据写入文件b时,此时文件b就是数据的目的地,在程序和文件b之间的管道称为流,因为数据是从程序流向文件b,所以称为数出流
  • Java语言中提供了java.io包,使得读写文件和处理的数据流非常容易

InputStream

InputStream是字节输入流的抽象类,是所有字节输入流的父类,这个类读取的是字节流。

InputStream类的常用方法
方法功能
FileInputStream(String name)通过打开一个到实际文件的连接来创建实例对象
int available()返回此输入流的数据读取方法可以读取的有效字节数
void close()关必此输入流并释放与该流相关联的所有系统资源
abstract int read()从输入流中读取下一个数据字节
int read(byte[] b)从输入流中读取一定数量的字节,并存储在数组b中
int read(byte[] b,int off,int len)将输入流中最多len个数据字节读入byte数组
long skip(long n)跳过和丢弃此输入流中n个字节的数据

其中,read()方法是抽象方法,便于子类根据需要实现该方法

OutPutStream

OutPutStream类是字节输出流的抽象类,是所有字节输出流的父类。该类接受的也是字节流

OutPutStream类的常用方法
方法功能
FileOutputStream(String name)创建一个向指定名称的文件中写入数据的输出文件流
void close()关闭当前输出流并释放与此流有关的所有系统资源
void flush()刷学当前输出流并强制将缓冲区的字节写入文件
void write(byte[] b)将b数组中的字节写入当前输出流
void write(byte[] b,int off,int len)将数组中下标从off开始的len个字节写入输出流
abstract void write(int b)将指定的字节写入此输出流

其中,write(int b)方法是抽象方法,便于子类根据需要实现该方法

字节流

FileInputStream
package 字节流.FileInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * <p>
 *从文件中读取并显示文件的内容
 * </p>
 *
 * @autor:lzj
 * @date:2021/8/26
 */
public class Demo01 {
    public static void main(String[] args) throws FileNotFoundException {
        int rs;
        byte b[] = new byte[10];
        try{
            File f = new File("D:\\All workspaces\\idea-workspace\\JavaSE\\输入输出流\\src\\字节流\\FileInputStream\\in.txt");
            FileInputStream fis = new FileInputStream(f);
            rs = fis.read(b,0,10);
            while (rs>0){
                String s = new String(b,0,rs);
                System.out.print(s);
                rs = fis.read(b,0,10);
            }
            fis.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
FileOutputStream
package 字节流.FileOutputStream;
import java.io.*;

/**
 * <p>
 *将文件notepad.txt的内容复制到note.txt中
 * </p>
 *
 * @autor:lzj
 * @date:2021/8/26
 */
public class Demo01 {
    public static void main(String[] args) {
        int rs;
        byte[] b = new byte[10];
        try {
            FileInputStream fis = new FileInputStream("D:\\All workspaces\\idea-workspace\\JavaSE\\输入输出流\\src\\字节流\\FileOutputStream\\notepad.txt");
            FileOutputStream fos = new FileOutputStream("D:\\All workspaces\\idea-workspace\\JavaSE\\输入输出流\\src\\字节流\\FileOutputStream\\note.txt");
            System.out.println("开始复制文件内容,请稍后……");
            rs = fis.read(b,0,10);
            while(rs>0){
                fos.write(b,0,rs);
                rs = fis.read(b,0,10);
            }
            System.out.println("文件复制结束");
            fis.close();
            fos.close();
        }catch (IOException e){
            e.printStackTrace();
        }

    }

}

字符流

Reader

该类是用于处理字符输入流类的父类,他是一个抽象类,不能实例化它的对象。

Reader类的常用方法
方法说明方法说明
read()从流中读入一个字符reset()重置该流
read(char[])从流中将一些字符读入数组skip(long n)跳过参数n指定的字符数量
ready()判断是否准备好读取此流
Writer

该类是处理字符输出流的父类,Write()类定义了写入字符和字符数组的方法,与Reader类、InputStream类相似,在创建对象时会自动打开流,通过显式调用close()方法关必流

Writer类的常用方法
方法说明
abstract void close()先刷新流,然后关闭该流
void write(char[] cbuf)将字符数组的内容写入流
void write(int c)向流中写入单个字符
void write(String str)向流中写入字符串
void write(String str,int off,int len)将字符串的某一部分写入流
FileReader

该类是Reader类的子类,它实现了从文件中读取字符数据,是文件字符输入流。

package 字符流.FileReader;
import java.io.*;
/**
 * <p>
 *
 * </p>
 *
 * @autor:lzj
 * @date:2021/8/26
 */
public class Demo01 {
    public static void main(String[] args) {
        try {
            File f1 = new File("D:\\All workspaces\\idea-workspace\\JavaSE\\输入输出流\\src\\字符流\\FileReader\\demo.txt");
            FileReader f = new FileReader(f1);
            int len = f.read();
            while(len>=0){//如果督导文件尾,则变量len的值尾-1
                System.out.print((char)len);
                len = f.read();
            }
            f.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
FileWriter

该类是Writer的子类,实现了将字符数据写入文件的功能,是文件字符输出流。如果需要写入的文件不存在,则会新建该文件,否则会删除旧文件,建立新的文件。

package 字符流.FileWriter;
import java.io.*;
import java.util.Random;
/**
 * <p>
 *创建5个2000以内的随机数,然后存储到文件rand.txt中
 * </p>
 *
 * @autor:lzj
 * @date:2021/8/26
 */
public class Demo01 {
    public static void main(String[] args) {
        Random rand = new Random();
        try {
            FileWriter fw = new FileWriter("D:\\All workspaces\\idea-workspace\\JavaSE\\输入输出流\\src\\字符流\\FileWriter\\rand.txt");
            int rs;
            for (int i = 0; i < 5; i++) {
                rs = rand.nextInt(2000);//产生小于2000的随机数
                fw.write(String.valueOf(rs));
                fw.write(",");
            }
            fw.write("你好,世界");
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱学习的大雄

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

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

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

打赏作者

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

抵扣说明:

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

余额充值