IO流/输入输出流(上)

文章目录

  • 一.文件
  • 二.流
    • (一)字节输入流
    • (二)字节输出流
    • (三)练习:请用字节输入输出流复制一个文本文件

一.文件

  • 1.文件的概念:相关记录或放在一起的数据的集合
  • 2.Java程序访问文件方式-->java.io.File类
  • 3.创建文件对象: File file = new File(String path);
  • 4.File类常用的方法如下:
方法名 说明
boolean exists( ) 判断文件或目录是否存在
boolean isFile( ) 判断是否是文件
boolean isDirectory( ) 判断是否是目录
String getPath( ) 返回此对象表示的文件的相对路径名
String getAbsolutePath( ) 返回此对象表示的文件的绝对路径名
String getName( ) 返回此对象表示的文件或目录的名称
boolean delete( ) 删除此对象指定的文件或目录
boolean createNewFile( ) 创建名称的空文件,不创建文件夹
long length() 返回文件的长度,单位为字节, 如果文件不存在,则返回 0L
  • 5.练习:实现查看文件属性、创建和删除文件功能,具体代码如下:
package InputOutput;

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

/**
 * @author sunyong
 * @date 2020/06/28
 * @description
 * 创建文件
 * 获取文件信息
 * 删除文件
 */
public class FileDemo {
    //创建文件
    public static void create(File file){
        if(!file.exists()){
            try {
                file.createNewFile();
                System.out.println("文件已创建!");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    //获取信息
    public static void showInfo(File file){
        if(file.exists()){
            if(file.isFile()){
                System.out.println("文件名称:"+file.getName());
                System.out.println("相对路径:"+file.getPath());
                System.out.println("绝对路径:"+file.getAbsolutePath());
                System.out.println("字节数:"+file.length());
            }
            if(file.isDirectory()){
                System.out.println("这是目录!");
            }
        }else {
            System.out.println("不存在");
        }
    }
    //删除文件
    public static void delete(File file){
        if(file.exists()){
            file.delete();
            System.out.println("文件已经被删除!");
        }
    }
    public static void main(String[] args) {
        File file = new File("test.txt");
        FileDemo.create(file);
        FileDemo.showInfo(file);
        FileDemo.delete(file);
    }
}
  • 6.效果如下:
    IO流/输入输出流(上)_第1张图片

二.流

  • 1.什么是流?
  • 流是一组有序的数据序列,以先进先出方式发送信息的通道.
  • 2.Java流的分类
  • 1)按流向分类:
  • 输入流: InputStream和Reader作为基类
  • 输出流:OutputStream和Writer作为基类
  • 2)按处理数据单元分类:
  • 字节流:InputStream字节输入流和OutputStream字节输出流作为基类
  • 字符流:Reader字符输入流和Writer字符输出流作为基类

(一)字节输入流

  • 1.字节输入流常用方法说明如下:
方法 说明
int read( ) 从输入流按字节读,返回的是该字节的整数表示形式,读到流的末尾返回-1
int read(byte[] b) 从输入流读取若干字节,保存到数组b中,返回的是读取到的字节数,读到流的末尾返回-1
int read(byte[] b,int off,int len) 从输入流读取若干字节,保存到数组b中,off指的是字节数组中开始保存数据的起始下标,len表示读取的字节数,返回的是实际读取到的字节数,读到流的末尾,返回-1
void close( ) 关闭输入流
int available() 可以从输入流中读取的字节数目
  • 2.子类FileInputStream常用的构造方法
  • 1)FileInputStream(File file)
  • 2)FileInputStream(String name)
  • 3.使用FileInputStream 读文本文件的步骤
说明 代码举例
1.导入相关类 import java.io.IOException; timport java.io.FileInputStream;
2.构造对象 FileInputStream fis= new FileInputStream(“test.txt”);
3.读取数据 fis.available(); fis.read();
4.关闭流 fis.close();

(二)字节输出流

  • 1.字节输出流常用方法说明如下:
方法 说明
void write(int c) 往输出流写入一个个字节
void write(byte[] buf) 往输出流写入一个字节数组
void write(byte[] b,int off,int len) 往输出流中写入一个字节数组,off代表开始从字节数组的off位置开始往输出流写,len代表往外写len长度的字节
void close() 关闭输出流
void flush() 强制把缓冲区的数据写到输出流中
  • 2.子类FileOutputStream常用的构造方法
  • 1)FileOutputStream(File file)
  • 2)FileOutputStream(String name)
  • 3)FileOutputStream(String name,boolean append)
  • 3.使用FileOutputStream 写文本文件的步骤
说明 代码举例
1.导入相关类 import java.io.IOException; import java.io.FileOutputStream;
2.构造对象 FileOutputStream fos= new FileOutputStream(“test.txt”);
3.写入数据 String str =“好好学习Java”;byte[] words = str.getBytes();fos.write(words, 0, words.length);
4.关闭流 fos.close();

观察输入流和输出流的步骤可发现其实步骤基本一样,只不过一个是读,一个是写

(三)练习:请用字节输入输出流复制一个文本文件

  • 思路分析: 复制其实就是把读写整合在一起,在读的时候将其写入在另一个文件即可完成复制,具体代码如下
package InputOutput;
//1)导入相关类
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
 * @author sunyong
 * @date 2020/06/28
 * @description
 * 字节输入输出流
 * 实现文件复制(读写)
 */
public class Copy {
    public static void main(String[] args) {
        //2)构造对象
        FileInputStream fis=null;
        FileOutputStream fos=null;
        try {

            fis = new FileInputStream("D:/我的青春谁做主.txt");
            fos  = new FileOutputStream("D:/sunyong/test.txt",true);//true表示追加,false表示覆盖
           int length=fis.available();
           byte[] words = new byte[length];
           int data;
           //读完之后直接写入
           while ((data=fis.read(words))!=-1){
               fos.write(words,0,length);
           }
            System.out.println("文件复制完毕!");
        } catch (IOException e) {
            e.printStackTrace();
        }
        //4)关闭流
        finally {
            try {
                fis.close();
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

注:接IO流/输入输出流(下):点我进入

你可能感兴趣的:(java高级特性API复习,java)