(流)
- 流按照方向分,分为两种输入流和输出流,是以内存作为参照物。当从数据源中,将数据读取到内存中时,叫做输入流,也叫读取流将内存中的数据写入到数据源时,叫做输入流,也叫写入流
- 流按照传输的内容分,分为:字节流,字符流,对象流。无论是哪一种流,底层部分都是以字节流方式传输。所以,基本质都是字节流,但是为了方便程序员更好的操作字符数据和对象数据,所以,在字节流基础上做了一层包装,形成了字符流和对象。
- 字节流的父类是InputStream和OutStream,这两个类的字节流父类是Reader和Writer。
- 流操作的意思就是完成内存数据和磁盘数据的转化
- 流操作的步骤:1.建立流 2.操作流 3.关闭流
- 流的操作如图下,写入流:
public class InputText {
public void readDate() {
InputStream in = null;
try {
//建立文件读取字节流
in = new FileInputStream("d:/王也.jpeg");
// int date = 0;
// //read()一次读取一个字节,返回读取的数据,当返回值为-1时,表示文件读取完毕
// while ((date = in.read()) != -1) {
// System.out.println(date);
// }
//将流中的数据读取到字节数据组中,类似于一个每次只能装30吨的车运送90吨的东西需要4次
//优点效率高
byte[] by=new byte[1024];
int len=0;
while((len=in.read(by))!=-1){
System.out.println(len);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
// 关闭流
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//写入流
public void writeDate(String str){
OutputStream out=null;
try {
out=new FileOutputStream("d:/1.txt",true);
//out.write(98)
out.write(str.getBytes());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//拷贝
public void copyFile(){
InputStream in=null;
OutputStream ou=null;
try {
in=new FileInputStream("d:/王也.jpeg");
ou=new FileOutputStream("e:/王也.jpeg");
byte[]by=new byte[1024];
int len=0;
while((len=in.read(by))!=-1){
ou.write(by,0,len);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
in.close();
ou.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
InputText inputText=new InputText();
inputText.readDate();
InputText in=new InputText();
in.writeDate("sbsbsbsb");
in.copyFile();
}
}
- 操作文件流时,如果文件不存在,那么读取流会抛出文件未找到的异常,而写入流,会创建新文件
读取文件
package io;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class ReaderTest {
public void readDate(){
Reader r=null;
BufferedReader br=null;
try {
//建立文件读取流
r=new FileReader("d:/博客.txt");
//套接流.在一个流的基础上,再套接一个流.也称高级流
br=new BufferedReader(r);
String str=null;
while((str=br.readLine())!=null){
System.out.println(str);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
r.close();
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
ReaderTest re=new ReaderTest();
re.readDate();
}
}