为了账号安全,请及时绑定邮箱和手机立即绑定

Java入门系列-22-IO流

标签:
Java

File类的使用

Java程序如何访问文件?通过 java.io.File 类

使用File类需要先创建文件对象 File file=new File(String pathname);,创建时在构造函数中指定物理文件或目录,然后通过文件对象的方法操作文件或目录的属性。

\ 是特殊字符,要使用需要转义 \\

File 类常用方法

方法名称说明
boolean exists()判断文件或目录是否存在
boolean isFile()判断是否是文件
boolean isDirectory()判断是否是目录
String getPath()返回此对象表示的文件的相对路径名
String getAbsolutePath()返回此对象表示的文件的绝对路径
String getName()返回此对象指定的文件或目录
boolean createNewFile()创建名称的空文件,不创建文件夹
long length()返回文件的长度,单位为字节,文件不存在则返回0L
File[] listFiles()返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
static File[] listRoots()列出可用文件系统根
boolean mkdirs()创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。

使用示例:

import java.io.File;import java.io.IOException;public class TestFile {    public static void main(String[] args) {        //创建File对象 传入文件的路径
        File file=new File("D:\\a.txt");        //创建File对象 传入文件夹的路径
        File dir=new File("D:/word");        //判断是否存在
        if(file.exists()) {            if(file.isFile()) {                //getName()获取名字
                System.out.println(file.getName()+" 是文件");
            }else if(file.isDirectory()){
                System.out.println(file.getName()+" 是目录");
            }           
        }else {
            System.out.println(file.getName()+" 不存在!");            try {                //创建文件
                file.createNewFile();
                System.out.println("文件大小:"+file.length()+" 字节");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }        
        if(dir.exists()) {            if(dir.isFile()) {
                System.out.println(dir.getName()+" 是文件");
            }else if(dir.isDirectory()) {
                System.out.println(dir.getName()+" 是文件夹");                //绝对路径
                System.out.println(dir.getAbsolutePath());
            }           
        }else {
            System.out.println(dir.getName()+" 不存在!");            //创建目录
            dir.mkdirs();
        }
        
    }
}

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

输入流:源数据流向程序(读)

输入流:程序中的数据流向目标数据源(写)

Java流的分类

按流向

  • 输出流(OutputStream和Writer作为基类)

  • 输入流(InputStream和Reader作为基类)

输入输出流是相对于计算机内存来说的

按照处理数据单元划分

  • 字节流

    • 字节输入流(InputStream基类)

    • 字节输出流(OutputStream基类)

  • 字符流

    • 字符输入流(Reader基类)

    • 字符输出流(Writer基类)

字节流是8位(1B)通用字节流,字符流是16位(2B)Unicode字符流

字节流

FileInputStream 是 InputStream  的子类

InputStream 类常用方法

方法名称说明
int read()从输入流中读取数据的下一个字节。返回0到255的int值,如果到达流的末尾,则返回-1
int read(byte[] b)从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。返回读入缓冲区的总字节数,如果达到末尾则返回-1
int read(byte[] b,int off,int len)将输入流中最多 len 个数据字节读入 byte数组
void close()关闭此输入流并释放与该流关联的所有系统资源
int available()返回此输入流下一个方法调用可以不受阻塞地从此输入流读取的估计字节数

FileInputStream 类常用构造方法

名称说明
FileInputStream(File file)通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
FileInputStream(String name)通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。

使用 FileInputStream 读取文件

import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;public class TestFileInputStream {    public static void main(String[] args) {
        FileInputStream fis=null;        try {
            fis=new FileInputStream("D:\\a.txt");            //读取结果存入StringBuffer
            StringBuffer sb=new StringBuffer();
            System.out.println("预计读取:"+fis.available()+"字节");            //记录每次读取的长度
            int len=0;            //缓冲区字节数组
            byte[] buff=new byte[1024];            while((len=fis.read(buff))!=-1) {
                System.out.println("还剩余:"+fis.available()+"字节");
                sb.append(new String(buff,0,len));
            }
            System.out.println("结果:");
            System.out.println(sb);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {            if (fis!=null) {                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}



作者:极客大全
链接:https://www.jianshu.com/p/ec1d7361c752


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消