IO输入输出流
IO输入输出流
在java中所有数据都是通过流的方式来操作
inputStream 类(字节输入流)
该类的一个直属子类FileInputStream是用来直接操作文件类型的
inputStream 类是一个抽象类,所以不能直接实例化这是可以通过多态性原则用子类的对象实例化父类。
传入的参数为一个File类型
File f=new File("D:"+File.separator+"test.txt");
InputStream input=new FileInputStream(f);//多态属性通过子类向上转型对父类进行实例化操作
inputStream中的方法
FileInputStream构造器
FileInputStream(File file)
通过打开与实际文件的连接创建一个 FileInputStream
,该文件由文件系统中的 File
对象 file
命名。
read(byte[] b)方法
该方法的返回值为int,即返回要读取字节的长度,若是字节被全部读取则返回值为-1;
该方法的作用是将文件中的所有字节都读取到byte[]数组里面。
实例
package com.Ming.imputstream;
import java.io.*;
public class InputStreamDemo01 {
public static void main(String[] args) throws IOException{
File f=new File("D:"+File.separator+"test.txt");
InputStream input=new FileInputStream(f);//多态属性通过子类向上转型对父类进行实例化操作
byte[] b=new byte[(int) f.length()];//定义一个byte类型的数组,用来存储从文件中读入的数据f.length()表示该文件的大小
int i= input.read(b);//此方法可以将从文件中读取到的数据写入到数组中,返回值表示读入数据的长度
System.out.println("读取字节的长度"+i);
input.close();//将其关闭
System.out.println(new String(b));
}
}
以上程序就将文件中的数据读取了出来
read()方法
该方法是就将文件中的字节一个个的读取,返回值就是数据的下一个字节,当数据全部读取完毕以后该方法就返回-1;
该方法在inputStream 类中是抽象方法,在子类FileInputStream中进行了重写
实例
package com.Ming.imputstream;
import java.io.*;
public class InputStreamDemo02 {
public static void main(String[] args) throws IOException {
File file=new File("D:"+File.separator+"test.txt");
InputStream input=new FileInputStream(file);
byte[] b=new byte[1024];
int temp=0;
int len=0;
while ((temp=input.read())!=-1){//read()方法是一个一个字节的读取,读取完毕返回值是-1;否则返回下一个字节
b[len]=(byte) temp;
len++;
}
input.close();
System.out.println(new String(b));
}
}
close()方法
IO类属于资源管理类所以在使用完毕的时候需要对其关闭。
此方法就是将其进行关闭的。
outputStream类(字节输出流)
该类同样需要多态性来进行实例化,其不同的是该类是将需要的数据存入到文件之中
实例化案例
File f=new File("D:"+File.separator+"test.txt");
OutputStream out=new FileOutputStream(f);
outputStream类中的方法
write(byte[] b)方法
该方法就是将byte[]数组中的字节数据写入到指定的文件之中,此方法没有返回值。
实例
package com.Ming.outputstream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class OutputStreamDemo01 {
public static void main(String[] args) throws IOException {//OutputStream类中的方法大部分有异常抛出,这里直接将所有异常全部抛出不处理
File f=new File("D:"+File.separator+"test.txt");
OutputStream out=new FileOutputStream(f);//利用类的多态性原则通过向上转型来实例化父类对象
String s="ming";
byte[] b= s.getBytes();//将字符串转换成byte[]数组类型
out.write(b);//此方法的参数是byte[]类型,想要写入字符串的话 得先将字符串转化为byte[]数组类型
out.close();//关闭该资源,IO输出流都需要进行关闭
}
}
此处需要注意的是若是给出的路径有该文件就会直接将字节数据写入,若是没有该文件则会自行创建,以上程序如果重复运行的话只会将文件中的字节数据覆盖罢了不想覆盖的话则需要在OutputStream out=new FileOutputStream(f);多添加一个属性,将其填为true这样就不会重复运行将会往文件里面一直写入字节数据,不会覆盖。\r\n表示的是换行。
实例
package com.Ming.outputstream;
import java.io.*;
public class OutputStreamDemo02 {
public static void main(String[] args) throws IOException {
File f=new File("D:"+File.separator+"test.txt");
OutputStream out=new FileOutputStream(f,true);//多态性,true表示可以向文件里面追加类内容,原本都是表示覆盖
String s="\r\nMing";//\r\n表示换行
byte[] b= s.getBytes();//将字符串转换成byte[]数组类型
out.write(b);//此方法的参数是byte[]类型,想要写入字符串的话 得先将字符串转化为byte[]数组类型
out.close();//关闭该资源,IO输出流都需要进行关闭
}
}
字符流
字符流之中的操作基本上与字节流的差不多,平常在开发中一般使用字节流因为所有文件的数据就基本上都是由字节构成,比如一些图片类型的文件。需要注意的是字符流中必须要使用close()方法因为字符流不是直接操作文件的中间多了一个缓冲区,不关闭的话缓冲区的内容无法存入到文件中,若是真没有关闭则需要使用flush()方法,此方法的作用是刷新缓冲区的数据,这样就能将缓冲区的数据存入到文件之中了。