1.输入输出流
输入输出流---读写文件
输入---从文件中获取数据到自己的程序中接受处理【读】
输出---将自己的程序中处理好的数据保存到文件中【写】
流---数据的移动轨迹
2.流的分类
按照数据的移动轨迹将流分为:输出流 输出流
按照每一次读/写数据两的大小将流分为字节流,字符流
字节流:每一次可以读写一个字节的数据量,一个字节就是8为2进制,可以处理任何类型的文件【文件,图片,视频.....】
字符流:每一次可以读写一个字符的数据两,一个字符就是16为2进制,只能处理文本类型的数据。。
详细划分:字节输入流,字节输出流,字符输入流,字符输出流
3.字节流相关类的使用
字节输出流---OutputStream---抽象类---不能new---子类
1.FileOutputStream类
FileOutputStream类构造方法:
FileOutputStream(File file)通过File对象创建一个不可追加的字节输出流
FileOutputStream(File file,boolean append)通过File对象创建一个是否 追加的字节输出流。
FileOutputStream(String name)通过String对象创建一个不可追加的字节输出流。
FileOutputStream(String name,boolean append)通过String对象创建一个是否追加的字节输出流。
例如:
package ZiJieLiu;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class FileOutputStreamTest1 {
public static void main(String[] args) throws FileNotFoundException {
//FileOutputStream(File file)通过File对象创建一个不可追加的字节输流
String str="E"+File.separator+"Test2"+File.separator+"mytest.txt";
File file=new File(str);
FileOutputStream file1=new FileOutputStream(file);
OutputStream file11=new FileOutputStream(file);
//FileOutputStream(File file,boolean append)通过File对象创建一个是否追加的字节输出流
FileOutputStream file2=new FileOutputStream(file,true);
OutputStream file22=new FileOutputStream(file,true);
//FileOutputStream(String name)通过String对象创建一个不可追加的字节输出流
FileOutputStream file3=new FileOutputStream(str);
OutputStream file33=new FileOutputStream(str);
//FileOutputStream(String name,boolean oppend)通过String对象创建一个是否追加的字节输出流。
FileOutputStream file4=new FileOutputStream(str,true);
OutputStream file44=new FileOutputStream(str,true);
//注意:创建输入输出流对象的时候,会自动创建出实体文件。
}
}
FileOutputStream类实例方法:
void write(byte[] b)将b.length这个字节从指定的字节数组写入此文件输出流
void write(byte[] b,int off,inf len)将len字节从位于偏移量off的制定字节数组 写入此文件输出流
void write(int b)将指定的字节写入此文件输出流
void close()关闭此文件输出流并释放与此流相关联的任何系统资源
例如:
package ZiJieLiu;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class FileOutputStreamTest2 {
public static void main(String[] args) throws Exception {
String filepath="E:"+File.separator+"Test2"+File.separator+"mytest.txt";
OutputStream out=new FileOutputStream(filepath,true);
String info="hello,word";
//void write(byte[] b)将b.lenght这个字节从指定的字节数组写入此文件输出流。
//void write(byte[] b,int off,int len)将len字节从位于偏移量off指定的字节数组写入此文件输出流
//void write(int b)将指定的字节写入此文件输出流。
byte infobyte[]=info.getBytes();
for(byte by:infobyte){
out.write(by);
}
out.close();
}
}
2.DataOutputStream类
DataOutputStream类的构造方法
DataOutputStream(OutputStream out)创建一个新的数据输出流,以将数据写入指定的底层输出流。
例如:
package ZiJieLiu;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class DateOutputStreamTest1 {
public static void main(String[] args) throws Exception{
//DataOutputStream(OutputStream out)创建一个新的数据输出流,以将数据写入指定的底层输出流
File file=new File("E:"+File.separator+"Test2"+File.separator+"file1.txt");
OutputStream out=new FileOutputStream(file);
DataOutputStream dataout1=new DataOutputStream(out);
FileOutputStream fileout=new FileOutputStream(file,true);
DataOutputStream dataout2=new DataOutputStream(fileout);
DataOutputStream dataout3=new DataOutputStream(new FileOutputStream(new File("E:"+File.separator+"Test2"+File.separator+"file1.txt")));
}
}
DataOutputStream类的实例方法
void writeBoolean(boolean v)将boolean写入底层输出流作为1字节值
void writeByte(int v)将byte作为1字节值写入底层输出流
void writeDouble(double v)双参数传递给long使用,通过使用doubleToLongBits()首先将double值改为long值,然后将long传入文件,最多8个字节
void writeChar(int v)将char写入底层输出流作为2字节
void writeFloat(float v)用于首先通过使用floatToIntBits()将浮点值改为整数值,然后将该int值作为4字节写入文件,高字节
void writeInt(int v)将底层输出流写入,int作为四字节,高位字节
void writeLong(lonfg v)将long写入底层输出流,为8字节,高字节为首。
void writeShort(int v)将short写入底层输出流作为两个字节,高字节优先
void writeUTF(String str)使用modified UTF-8编码以机器无关的方式将字符串写入基础输出流
void flush()刷新此数据输出流
void close()关闭此输出流并释放与此流相关联的任何系统资源。
例如:
package ZiJieLiu;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class DateOutputStreamTest1 {
public static void main(String[] args) throws Exception{
File file=new File("E:"+File.separator+"Test2"+File.separator+"dataFile.txt");
OutputStream out=new FileOutputStream(file);
DataOutputStream dataout=new DataOutputStream(out);
boolean true1=true;
byte number=01;
char char1='A';
double number2=190.1;
float number3=16.5f;
int number4=55;
long number5=66l;
short number6=22;
String str="hello,zhangsan";
//实例方法
//void writeBoolean(boolean v) 将 boolean写入底层输出流作为1字节值。
dataout.writeBoolean(true1);
//void writeByte(int v) 将 byte作为1字节值写入底层输出流。
dataout.writeByte(number);
//void writeChar(int v) 将 char写入底层输出流作为2字节值,高字节优先。
dataout.writeChar(char1);
//void writeDouble(double v) 双参数传递给转换 long使用 doubleToLongBits方法在类 Double ,然后写入该 long值基础输出流作为8字节的数量,高字节。
dataout.writeDouble(number2);
//void writeFloat(float v) 浮子参数的转换 int使用 floatToIntBits方法在类 Float ,然后写入 该 int值基础输出流作为一个4字节的数量,高字节。
dataout.writeFloat(number3);
//void writeInt(int v) 将底层输出流写入 int作为四字节,高位字节。
dataout.writeInt(number4);
//void writeLong(long v) 将 long写入底层输出流,为8字节,高字节为首。
dataout.writeLong(number5);
//void writeShort(int v) 将 short写入底层输出流作为两个字节,高字节优先。
dataout.writeShort(number6);
//void writeUTF(String str) 使用 modified UTF-8编码以机器无关的方式将字符串写入基础输出流
dataout.writeUTF(str);
//void flush() 刷新此数据输出流。
dataout.flush();
//void close() 关闭此输出流并释放与此流相关联的任何系统资源。
dataout.close();
out.close();
}
}
优点:可以直接写出基本数据类型的数据和String,其不需要转换成字节数组
缺点:保存到文件中的数据是乱码
字节输入流---InputStream---抽象类---不能new---子类
1.FileInputStream类
FileInputStream类构造方法
FileInputStream(File file)通过File对象创建一个字节输入流
FileInputStream(String name)通过String对象创建一个字节输入流
例如:
package ZiJieLiu;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class FileInputStreamTest1 {
public static void main(String[] args) throws Exception{
//FileInputStream(File file)通过File对象创建一个字节输入流
File file=new File("E:"+File.separator+"Test2"+File.separator+"mytest.txt");
FileInputStream in1=new FileInputStream(file);
InputStream in11=new FileInputStream(file);
//FileInputStream(String name)通过String对象创建一个字节输入流
String filepath="E:"+File.separator+"Test2"+File.separator+"mytest.txt";
FileInputStream in2=new FileInputStream(filepath);
InputStream in22=new FileInputStream(filepath);
}
}
FileInputStream类实例方法
int read()从该输入流读取一个字节的数据---返回值:读取到的具体字节数据的int型,如果达到文件末尾返回-1
int read(byte[] b)从该输入流读取最多b.length个字节的数据为字节数组---返回值:读取的总字节数,如果达到文件末尾返回-1
void close()关闭此文件输入流并释放与流相关联的任何系统资源
例如:
package ZiJieLiu;
import java.io.File;
import java.io.FileInputStream;
public class FileInputStreamTest2 {
public static void main(String[] args) throws Exception{
File file=new File("E:"+File.separator+"Test2"+File.separator+"mytest.txt");
FileInputStream in=new FileInputStream(file);
//int read()从该输入流读取一个字节的数据
//返回值:读取到的具体字节数据的int行,如果到达文件末尾返回-1
//int read(byte[] b)从该输入流读取最多b.length个字节的数据为字节数组。
//返回值:读取的总字节数,如果到达文件末尾返回-1
//保存读取以后的数据的字节数组
//int read(byte[] b)从输入流读取最多b.length个字节的数据为字节数组
//返回值:读取的总字节数,如果到达文件末尾返回-1
//保存读取以后的书的字节数组
byte bytearray[]=new byte[(int)file.length()];
int length=in.read(bytearray);
String info=new String(bytearray,0,length);
System.out.println(info);
in.close();
}
}
2.DataInputStream类
DataInputStream类构造方法
DataInputStream(InputStream in)创建使用指定的底层InputStream的DataInputStream.
例如:
package ZiJieLiu;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class DataInputStreamTest {
public static void main(String[] args) throws Exception{
//DataInputStream(InputStream out)创建使用指定的底层InputStream的DataInputStream。
File file=new File("E:"+File.separator+"Test2"+File.separator+"mytest.txt");
InputStream in=new FileInputStream(file);
DataInputStream datain=new DataInputStream(in);
FileInputStream filein=new FileInputStream(file);
DataInputStream datain2=new DataInputStream(filein);
DataInputStream datain3=new DataInputStream(new FileInputStream(new File("E:"+File.separator+"Test2"+File.separator+"mytest.txt")));
}
}
DataInputStream类实例方法
boolean readBoolean()
byte readByte()
char readChar()
double readDouble()
float readFloat()
int readInt()
long readLong()
short readShort()
String readUTF()
void close()
例如:
package ZiJieLiu;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class DataInputStreamTest2 {
public static void main(String[] args) throws Exception{
//DataInputStream(InputStream out)创建使用指定的底层InputStream的DataInputStream。
File file=new File("E:"+File.separator+"Test2"+File.separator+"dataFile.txt");
InputStream in=new FileInputStream(file);
DataInputStream datain=new DataInputStream(in);
//实例方法
boolean falg=datain.readBoolean();
byte number=datain.readByte();
char char1=datain.readChar();
double number1=datain.readDouble();
float number2=datain.readFloat();
int number3=datain.readInt();
long number4=datain.readLong();
short number5=datain.readShort();
String name=datain.readUTF();
datain.close();
System.out.println(falg+"t"+number+"t"+char1+"t"+number1+"t"+number2+"t"+number3+"t"+number4+"t"+number5+"t"+name);
}
}



