读写文件的基本流都有哪些

Posted

tags:

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

Java 的,FileReader FileWriter File FileInputStream这些是吗

一、IO流的三种分类方式

1.按流的方向分为:输入流和输出流

2.按流的数据单位不同分为:字节流和字符流

3.按流的功能不同分为:节点流和处理流

二、IO流的四大抽象类:

字符流:Reader Writer

字节流:InputStream(读数据)

OutputStream(写数据)

三、InputStream的基本方法

int read() throws IOException 读取一个字节以整数形式返回,如果返回-1已到输入流的末尾

void close() throws IOException 关闭流释放内存资源

long skip(long n) throws IOException 跳过n个字节不读

四、OutputStream的基本方法

void write(int b) throws IOException 向输出流写入一个字节数据

void flush() throws IOException 将输出流中缓冲的数据全部写出到目的地

五、Writer的基本方法

void write(int c) throws IOException 向输出流写入一个字符数据

void write(String str) throws IOException将一个字符串中的字符写入到输出流

void write(String str,int offset,int length)

将一个字符串从offset开始的length个字符写入到输出流

void flush() throws IOException

将输出流中缓冲的数据全部写出到目的地

六、Reader的基本方法

int read() throws IOException 读取一个字符以整数形式返回,如果返回-1已到输入流的末尾

七、节点流类型

八、访问文件之FileInputStream和FileOutputStream继承基类用于向文件中输入输出字节

九、访问文件之FileReader和FileWriter继承基类用于向文件中输入输出字符

----输出流在构造函数第二个参数可以设置true意义为跟在已有文件后进行输入
----此类流会抛出FileNotFoundException需要对其进行显示捕捉
十、缓冲流:缓冲流要套接在相应的节点流之上,提高了读写的效率。

此处理流的构造方法都得传相对应的基类类型

BufferedReader:提供了readLine方法用于高校读取一行字符串

BufferedWriter:提供了newLine用于写入一个行分隔符也就是换行

BufferedInputStream 没多大用处

BufferedOutputStream 没多大用处

十一、转换流:主要作用将字节流转换成字符流。用处较大!

转换流在构造时可以指定其编码集合

InputStreamReader需要和InputStream套接

OutputStreamWriter需要和OutputStream套接

例:OutputStreamWriter osw = new OutputStreamWriter (new FileOutputStream(文件路径);

方法例:osw.getEncoding(); 获得流的编码方式

十二、数据流与字节数组流:

数据流主要为实现可以存取Java原始数据类型如long,boolean

数据流是字节流

DataInputStream需要和InputStream套接

DataOutputStream需要和OutputStream套接

DataInputStream方法:readBoolean() readInt() read……()……

readUTF():网络传输常用方法 读一个Unicode字符串

DataOutputStream方法与DataInputStream基本对应为写的方法

//此构造函数等于已可以往一个字节数组里输入内容

ByteArrayOutputStream baos = new ByteArrayOutputStream ();

//此方法为获取一个字节数组方法返回字节数组

baos.toByteArray();

//此方法获取字节数组占了多少字节

new ByteArrayInputStream(一个字节数组)。available()

1ByteArrayOutputStream baos =
2 new ByteArrayOutputStream();
3 DataOutputStream dos =
4 new DataOutputStream(baos);
5 try
6 dos.writeDouble(Math.random());
7 dos.writeBoolean(true);
8 ByteArrayInputStream bais =
9 new ByteArrayInputStream(baos.toByteArray());
10 System.out.println(bais.available());
11 DataInputStream dis = new DataInputStream(bais);
12 System.out.println(dis.readDouble());
13 System.out.println(dis.readBoolean());
14 dos.close(); dis.close();
15 catch (IOException e)
16 e.printStackTrace();
17

十二、Print流

Print流只有输出流无输入流,PrintWriter和PrintStream分别针对字符字节

两个类提供了重载的Print和Println方法用于多种数据类型的输出

PrintWriter和PrintStream的输出操作不会抛出异常

PrintWriter和PrintStream有自动flush功能

----System.setOut(接收OutputStream类):用于设置系统默认输出流

十二、Object流

等同于c#序列化,用直接将Object写入或读出

transient关键字为不序列化此成员变量

需要序列化的类必须实现Serializable接口

主要方法:writeObject(Object); readObject();

读出为Object类型需要强转数据类型

1 import java.io.*;
2
3 public class TestObjectIO
4 public static void main(String args[]) throws Exception
5 T t = new T();
6 t.k = 8;
7 FileOutputStream fos = new FileOutputStream("d:/share/java/io/testobjectio.dat");
8 ObjectOutputStream oos = new ObjectOutputStream(fos);
9 oos.writeObject(t);
10 oos.flush();
11 oos.close();
12
13 FileInputStream fis = new FileInputStream("d:/share/java/io/testobjectio.dat");
14 ObjectInputStream ois = new ObjectInputStream(fis);
15 T tReaded = (T)ois.readObject();
16 System.out.println(tReaded.i + " " + tReaded.j + " " + tReaded.d + " " + tReaded.k);
17
18
19
20
21 class T
22 implements Serializable
23
24 int i = 10;
25 int j = 9;
26 double d = 2.3;
27 transient int k = 15;
28

参考资料:http://www.mldn.cn/articleview/2009-3-4/article_view_3031.htm

参考技术A FileReader FileWriter File FileInputStream
这些都只是高级流。
还有诸如inputstream bufferedinputstream(带缓冲的)
很多,建议看下java.io.*;包下的源码。
很反感各处乱粘的无知勇士们本回答被提问者采纳
参考技术B FileReader,FileWriter,FileInputStream都是基本流,基本流的定义就是构造方法中可直接对File对象进行注入的流,像BufferedInputStream这些是高级流,只能通过传递其他基本流来创建对象 参考技术C I/O这段基本分为的是两类,一类是字节,一类是字符。凡是Stream这种的都是字节读入,而Reader和Writer都是属于字符。而文件相关的,当然就有FileInputStream,FileReader等等这些了。你可以好好看看相关书籍的I/O章节。就明白了。 参考技术D 按时地方

输入输出流

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中的io流都有哪些

在大数量级的数据存储上,比较靠谱的分布式文件存储都有哪些?

Mac移动硬盘U盘读写软件工具都有哪些?

java中对文件进行读写操作的基本类是啥?

Python文件操作都有哪些方式?