06输入和输出处理【流】(一)

输入和输出处理(一)

文件是相关记录或放在一起的数据的集合

File:文件和目录路径名的抽象表示:
1. 文件和目录是可以通过File封装成对象的
2. 对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以是存在的,也可以是不存在的。将来是要通过具体的操作把这个路径的内容转换为具体存在的

File类

File类继承Object类,实现Serializable、comparable

java程序访问文件属性:JAVA API:java.io.File类

File file = new File(String pathname);
//String pathname指 "c\\teast.txt"或者"c:/test.txt"
3种构造方法:
  • File(String pathname):通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。

    public static void main(String[] args){
        File f1 = new File("E:\\xx\\java.txt");
        System.out,print(f1);  //输出目录,重写了方法
    }
    
  • File(String parent,String child):从父路径名字符串和子路径名字符串创建新的File实例。

    File f1 = new File("E:\\xx","java.txt");
    System.out,print(f2);
    
  • File(File parent,String child):从父抽象路径名和子路径名字符串创建新的 File实例。

    File f3 = new File("E:\\xx");
    File f4 = new File("java.txt");
    System.out,print(f4);
    
File类的常用方法:
方法名称说明
boolean exists( )判断文件或目录是否存在
boolean isFile( )判断是否是文件
boolean isDirectory( )判断是否是目录
String getPath( )返回此对象表示的文件的相对路径名
String getAbsolutePath( )返回此对象表示的文件的绝对路径名
String getName( )返回此对象表示的文件或目录的名称
boolean delete( )删除此对象指定的文件或目录
boolean createNewFile( )当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件
long length()返回文件的长度,单位为字节,如果文件不存在,则返回 0L
boolean mkdir()创建由此抽象路径名命名的目录。存在目录返回false,不存在创建目录,返回true
Boolean mkdirs()创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录(多级目录)
  1. 给出了文件名.txt,若调用mkdir()方法,,创建的还会是一个目录。创建啥用什么方法,与使用的方法有关,与路径名无关

  2. 文件夹下有目录xxxx.txt,在创建xxxx.txt文件,返回false,不可同名,哪怕类型不一样

  3. 创建文件之前要先创建目录;如果要删除目录,目录下有内容,要先删除里面的文件或目录,在删除最外面的

File f = new File("盘:\\根目录");


//public String[] list():返回此抽象路径名表示的目录中的文件、目录的名称字符串数组
String[] strArray = f.list();
for(String str : strArray){
    System.out.println(str);
}

//public File[] listFiles():返回此抽象路径名表示的目录中的文件、目录的File对象数组
File[] fileArray = f.listFiles();
for(File file : fileArray){
    Syste.out.println(file); //输出所有文件绝对路径
    Syste.out.println(file.getName());  //只得到内部文件和目录名
   
    if(file.isFile()){    //先判断是否是文件
        Syste.out.println(file.getName());  //只要文件名
    }
}

通过流来读写文件:

  1. 流是一组有序的数据序列
  2. 以先进先出方式发送信息的通道

​ InputStream------------------------------------------>OutputStream

流的划分
按照流向分类:
  • 输出流:OutputStream和Writer作为基类

  • 输入流:InputStream和Reader作为基类

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

按照处理数据单元划分:
  • 字节流
    • 字节输入流InputStream基类
    • 字节输出流OutputStream基类
  • 字符流
    • 字符输入流Reader基类
    • 字符输出流Writer基类

字节流是8位通用字节流,字符流是16位Unicode字符流

InputStream类常用方法:

InputStream类抽象类,使用要找其子类

  • int read()
  • int read(byte[] b)
  • int read(byte[] b, int off, int len)
  • void close()
  • int available():可以从输入流中读取的字节数目, available是表示在不阻塞的情况下,还可以读取多少个字节。而不是指这个流还有多长
子类FileInputStream常用的构造方法:
  • FileInputStream(File file):指定的File对象表示的文件
  • FileInputStream(String name) :指定的名称读取文件
FileInputStream读文本文件步骤:
  • 引入相关的类

    • import java.io.IOException;
      import java.io.FileInputStream;
      
  • 构造文件输入流FileInputStream对象

    • FileInputStream fis = new FileInputStream("c:\\test.txt");
      
  • 读取文本文件的数据

    • fis.available();
      fis.read();
      
  • 关闭文件流对象

    • fis.close();
      

OutputStream类常用方法:
  • void writer(int c)
  • void write(byte[] buf)
  • void write(byte[] b, int off, int len)
  • void close()
  • void flush():强制把缓冲区的数据写到输出流中
子类FileOutputStream常用的构造方法:
  • FileOutputStream (File file)

  • FileOutputStream(String name) :创建输出流以指定的名称写入文件

  • FileOutputStream(String name,boolean append):追加写入

    • 第二个参数为true,则字节将追加写入文件的末尾(而不是开头)

      FileOutputStream fos = new FileOutputStream("E:\\fos.txt",true);
      

前两种构造方法在向文件写数据时将覆盖文件中原有的内容

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

FileOutputStream写文本文件步骤:
  • 引入相关的类

    • import java.io.IOException;
      import java.io.FileOutputStream;
      
  • 构造文件输入流FileOutputStream对象

    • FileOutputStream fos = new FileOutputStream("test.txt");
      
  • 读取文本文件的数据

    • String str = "好好学习java"
      byte[] words = str.getBytes();
      fos.write(words,0,words.length);
      
  • 关闭文件流对象

    • fos.close();
      
复制文本文件:
// 1、创建输入流对象,负责读取D:\我的青春谁做主.txt文件
FileInputStream fis = new FileInputStream("D:\\我的青春谁做主.txt");

//2、创建输出流对象,负责将文件内容写入到C:\myFile\my Prime.txt中
FileOutputStream fos = new FileOutputStream("C:\\myFile\\myPrime.txt",true);

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

// 4、通过循环实现文件读写
while((fis.read())!=-1){    //读取文件
	fos.write(words, 0, words.length);   //写入文件
}
fos.close();
fis.close()
  • 读写数据:复制文本文件一次读取一个字节,一次写入一个字节

    int by;
    while((by=fis.read()!=-1)){
    	fos.write(by);
    }
    
  • 一次读取一个字节数组

    byte[] bys = new byte[1024];//1024及其整数倍
    int len;
    while((len = fis.read(bys))!=-1){
        System.out.println(new String(bys,0,len));
    }
    
    //len = fis.read(bys)不是定义的长度,而是实际读取的长度
    
换行:
//换行
fos.write("\r\n".getBytes());   // \r\n:windows换行
fos.write("\n".getBytes());    	// \n:linux换行
fos.write("\r".getBytes());     //mac
字节流写数据加异常:

**finally:**在异常处理时提供finally快块来执行所有清楚操作,比如说IO流中的释放资源(xxx.close),被finally控制的语句一定会执行,除非JVM退出

try{
   可能出现异常的代码 
}catch(异常类名 变量名){
    异常的代码处理
}finally{
    执行所有的清除操作
}

FileOutputStream fos = null;
try{
    fos = new FileOutputStream("存在的目录");
    fos.write("hello".getBytes());
}catch(IOException){
    e.printStakTrace();
}finally{
    if(fos != null){   //判断是否为空,避免空指针
        try{
       fos.close(); 
        }catch(IOException){
            e.printStakTrace();
        }
    }
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

朱尔斯Jules

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

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

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

打赏作者

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

抵扣说明:

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

余额充值