输入输出流

Posted rongbin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入输出流相关的知识,希望对你有一定的参考价值。

java.io包(I/O流库)中提供大量的流类

所有输入流都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类

所有输出流都是抽象类OutputStream(字节输出流)或抽象类Writer(字符输出流)的子类

 

File类:

//File类对象主要用来获取文件本身的一些信息,如文件所在目录、文件的长度或文件读写权限等

//File类不涉及对文件的读写操作

构造方法:

File(String filename)//默认file与程序在同一目录;

File(String directoryPath,String filename)

File(File dir,String filename)

filename是文件名,directortPath是文件的路径,dir为一个目录;

 

Java中File类的常用方法:

①获取文件本身信息

1.public String getName()

获取文件的名字;

2.public boolean canRead()

判断文件是否是可读的;

3.public boolean canWrite()

判断文件是否可被写入;

4.public boolean exists()

判断文件是否存在;

5.public long length()

获取文件的长度(单位是字节);

6.public String getAbsolutePath()

获取文件的绝对路径;

7.public String getParent()

获取文件的父目录;

8.public boolean isFile()

判断文件是否是一个普通文件,而不是目录;

9.public boolean isDirectory()

判断文件是否是一个目录;

10.public boolean isHidden()

判断文件是否是隐藏文件;

11.public long lastModified()

获取文件最后修改的时间(时间是从1970年午夜至文件最后修改时刻的毫秒数);

②获取目录本身信息

12.public boolean mkdir()

创建一个目录,成功返回true,否则返回false;

13.public String[] list()

用字符串形式返回目录下的全部文件;

14.public String[] list(FilenameFilter obj)

用字符串形式返回目录下的指定类型的所有文件;

15.public File[] listFiles()

用File对象形式返回目录下的所有文件;

16.public File[] listFiles(FilenameFilter obj)

用File对象形式返回目录下的指定类型的所有文件;

/*参数FilenameFilter是一个接口,该接口有一个方法:

public boolean accept(File dir,String name);*/

import java.io.*;
public class FileAccept implements FilenameFilter{
    private String extendName;
    public void setExtendName(String s){
        extendName="."+s;
    }
    public boolean accept(File dir,String name){    //重写接口的方法
        return name.endsWith(extendName);
    }
}
public class Main{
    public staitc void main(String args[]){
        File dirFile=new File(".");
        FileAccept fileAccept=new FileAccept();
        fileAccept.setExtendName("java"); 
        String fileName[]=dirFile.list(fileAccept);
    }
}

 

运行可执行文件:

java.lang.Runtime类使用该类的getRuntime()静态方法创建对象

方法:

exec(String command)

打开本地机器上的可执行文件或执行一个操作(如记事本程序和浏览器);

//通过file.getAbsolutePath()来获取绝对路径

 

(一)文件字节流(FileInputStream类和FileOutputStream类):

 //注意:顺序读取和写文件

//缺点:以字节为单位处理数据不能很好的操作Unicode字符,因为汉字占用2个字节,使用字节流会出现"乱码"现象

文件字节输入流(FileInputStream类):

构造方法:

FileInputStream(String name) throws IOException

使用给定的文件名name创建FileInputStream流;

FileInputStream(File file) throws IOException

使用File对象创建FileInputSteam流;

 

输入流方法:

int read()

从源(name或file)中读取单个字节的数据,返回字节值(0~255之间的一个整数),未读出字节返回-1;

int read(byte b[])

从源中试图读取b.length个字节到字节数组b中,返回实际读取的字节数目,未到达文件的末尾返回-1;

int read(byte b[],int off,int len)

从源中试图读取len个字节到字节数组b中的off指定的位置开始存放,返回实际读取的字节数目,未到文件的末尾返回-1;

close()

关闭流;

 

文件字节输出流(FileOutputStream类):

构造方法:

FileOutputStream(String name) throws IOException

FileOutputStream(String name,boolean append) throws IOException

FileOutputStream(File file) throws IOException

FileOutputStream(File file,boolean append) throws IOException

//append默认取值false,刷新所指向的文件;

 

输出流方法:

void write()

向目的地写入单个字节;

void read(byte b[])

向目的地写入一个字节数组;

void read(byte b[],int off,int len)

给定字节数组中起始于off处取len个字节写到目的地;

close()

 

 

(二)文件字符输入流(FileReader类)和文件字符输出流(FileWriter类)

//特点:可更好识别Unicode字符,汉字等

构造方法:

FileReader(String filename) throws IOException

FileReader(File filename) throws IOException

FileWriter(String name) throws IOException

FileWriter(String name,boolean append) throws IOException

FileWriter(File file) throws IOException

FileWriter(File file,boolean append) throws IOException

 

输入流方法:

read()

close()

使用字符数组读取数据,以字符为基本单位;

输出流方法:

write()

close()

 

 

(三)缓冲流(BufferedReader类和BufferedWriter类)

//特点:以行来读写文件

构造方法:

BufferedReader(Reader in) throws IOException

BufferedWriter(Writer out) throws IOException

//可向参数in和out传递Reader子类对象(如FileReader的实例)和Writer子类对象(如FileWriter的实例)

//注意:缓冲流作为上层流,字符流作为底层流,只需要关闭上层流,底层流会自动关闭

 

输入流方法:

readLine()

读取文本行;

close()

 

输出流方法:

write(String s,int off,int len)

newLine()

写入一个回行符;

flush()

刷新缓存;

close()

 

 

(四)随机流(RandomAccessFile类)

//特点:可自行定位读写位置

//注意:随机流既不是InputStream和Reader的子类,也不是OutputStream和Writer的子类

//随机流不刷新文件

构造方法:

RandomAccessFile(String name,String mode)

参数name作为源,也作为目的地,参数mode取r(只读)或rw(可读写);

RandomAccessFile(File file,String mode)

 

方法:

seek(long a)

定位读写位置,参数a确定读写位置距离文件开头的字节个数;

getFilePointer()

获取流的当前读写位置;

length()

获取文件的长度;

read()

write()

close()

//更多方法另行查询

 

(五)数组流(字节数组流ByteArrayInputStream、ByteArrayOutputStream类和字符数组流CharArrayReader和CharArrayWriter类)

//特点:可用数组进行文件的操作

字节数组流的构造方法:

ByteArrayInputStream(byte[] buf)

ByteArrayInputStream(byte[] buf,int offset,int length)

ByteArrayOutputStream()

缓冲区大小默认为32字节,容量自动增加;

ByteArrayOutputStream(int size)

缓冲区大小为size个字节,容量自动增加;

 

输入流方法:

public int read()

顺序从源中读出一个字节,返回读出的字节值;

public int read(byte[] b,int off,int len)

返回实际读出的字节个数,未读出返回-1;

close()

 

输出流方法:

public void write(int b)

向缓冲区写入一个字节;

public void write(byte[] b,int off,int len)

public byte[] toByteArray()

返回输出流写入到缓冲区的全部字节;

close()

 

 

(六)数据流(DataInputStream类和DataOutputStream类)

//特点:可以以各种风格读取文件,不必关心数值的字节

构造方法:

DataInputStream(InputStream in)

DataOutputStream(OutputStream out)

 

 

//方法自行查询

 

 

(七)对象流(ObjectInputStream类和ObjectOutputStream类)

构造方法:

ObjectInputStream(InputStream in)

ObjectOutputStream(OutputStream out)

 

方法:

readObject()

writeObject(Serializable ob)

参数Serializable是一个没有方法的接口,实现该接口的对象则为序列化的对象;

close()

以上是关于输入输出流的主要内容,如果未能解决你的问题,请参考以下文章

片段(Java) | 机试题+算法思路+考点+代码解析 2023

C#输入输出流中中文乱码问题

IO流之字符输入流,字符输出流

java中输入输出流如何把数据输出为Excel表格形式

java中输入输出流如何把数据输出为Excel表格形式

Java 输入输出流