IO流基础知识
IO流基础知识
流的原理:
在Java程序中、对于数据的输入、输出操作以(Stream)方式进行
JDK提供了各种各样的“流”类,用于获取不同种类的数据;程序中通过标准的方法输入或输出数据。
Java的流类型一般位于Java.io包中。
流的概念
数据源
date source。提供原始数据的原始媒介。常见的:数据库、文件、其他程序、内存、网络连接、IO设备。
数据源就像一个水箱,流就像水箱中流着的水,程序就是我们最终用户。流是一个抽象、动态的概念,是一串连续动态的数据集合。
流的分类
输入流,数据源到程序(InputStream、Reader读进去)
输出流、程序到目的地(OutputStream、Wirte写进去)
处理数据单元:
字节流:按照字节读取数据(InputStream、OutputStream)
字符流:按照字符串读取数据(Reader、Wirte)
功能不同
节点流,可以直接从数据源或目的地读写数据。
处理流(包装流),不直接连接到连接到数据源或目的地,是其他封装,主要目的是简
化操作性和提高性能
节点流和处理流的关系:
节点流出于IO操作的第一线,所有操作必须他们进行
处理流可以对其他流进行处理(提高效率或操作灵活性)
文件流。
读取(输入)文件示例:
package io;
/*
-
FileInputStream
-
方向:输入流
-
单元:字节流
-
功能:节点流
-
讲D:/IO.txt中的内容打印在控制台上
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class iotest {
public static void main(String[] args) throws IOException {
//File file = new File(“D:/IO.txt”);
InputStream input = new FileInputStream(new File(“D:/IO.txt”));
//如何读取文件中数据
//准备一个字节数组,作为中转站
byte[] b = new byte[1024];
//去读取一个字节
int len;
len = input.read();while(len!=-1){ String str = new String(b,0,len); //byte[]----->String System.out.println(str); len = input.read(b); } input.close(); //关闭文件流
}
}
写入(输出)文件示例
package io;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/*
-
FileOutputStream
-
方向:输出流
-
单元:字节流
-
功能:节点流
-
讲字符串打印到文件上
*/
public class testoutput {public static void main(String[] args) throws IOException {
//新建输出文件流
OutputStream output = new FileOutputStream(new File(“D:/deom.txt”));String str = "hello output"; //String---->byte[] byte [] b = str.getBytes(); //讲字符串转换为字节数组 output.write(b); //将字符数组写入文件中 System.out.println("ok"); output.close();
}
}
文件的复制
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/*
- 目标:将D:/test.txt复制到D:/test1.txt
- 1.文件输入流:FileIutputStream,将D:/test.txt中的内容读入内存中
- 2.文件输出流:FileOutputStream,将内存中的信息写入D:/test1.txt中
*/
public class teachercopy {
public static void main(String[] args) throws IOException {
//文件输入流
InputStream input = new FileInputStream(“D:/test.txt”);
//文件输出流
OutputStream output = new FileOutputStream(“D:/test1.txt”);
//创建缓冲区,字节数组
byte[] b = new byte[1024];
int len;
while((len=input.read(b))!=-1) {
//将信息写入目的地
output.write(b,0, len);
}
System.out.println(“ok”);
//关闭资源,先开后关闭,后开后关闭
output.close();
input.close();
}
}
文件流的扩展
往文件里面追加东西的方法:
FileOutputStream(String name , boolean append)
当boolean为true时,则将字节写入文件末尾处,而不是开头。
刷新缓冲区和关闭资源:
flush();刷新并保存操作。调用该方法指示将字节立即写入它们预期目标。
close();关闭资源,调用close();方法时,它会自动调用flush()方法,把全部字节写入文件。
利用字节流来复制:
/**
字节流:可以操控任何文件
FileInputStream
FileOutputStream
字符流:只能操作字符类型的文件,如txt、java、html、xml。。。。。
不能操作除字符以外的文件如word文档,word文档底层不是以字符来存储的,而是用字节来存储的。
FileReader
FileWriter
*/
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
public class copy3 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Reader reader = new FileReader("D:/test.txt");
Writer writer = new FileWriter("D:/test2.txt");
int c;
while((c=reader.read())!=-1) {
System.out.print((char)c);
writer.write(c);
writer.flush();
}
writer.close();
reader.close();
}
}