什么是IO流
创建文件,创建目录
拷贝文件,拷贝视频
读取文件中内容信息
读取键盘输入信息
网络文件传输IO流分类
字节流:拷贝视频,拷贝文件,因为这些操作必须精确到字节
字符流:读取文件中内容,把内容进行输出
字符流和字符流的实现方式:输入流和输出流输入流和输出流的概念
文件的拷贝,它完成一个动作的实现。
第一步:选中源文件(对应程序的输入流)
第二步:拷贝操作(IO流中read和write的操作)
第三步:选择拷贝的地方,目标文件(对应程序中的输出流)
难点:不知道输入流什么时候用,也不知道输出流什么时候用IO流学习的内容
4.1 IO流的所有应用在javaAPI文档中java.io包里面
4.2 文件操作,java.io.File类
4.3 字节流:InputStream,OutputStream
字符流:Reader,Write
5.File类
- 构造方法:只提供带参数的构造方法
File(File parent,File child):在已有的路径下面去创建一个文件或者一个目录 File(String
pathName):在给定路径中创建一个文件或者目录 File(Stirng parent,Stirng
child):在已有的一个路径下面创建一个文件或者一个目录
- 普通方法
boolean creatNewFile():创建一个文件 boolean delete():删除文件或目录 boolean
exists():文件或目录是否存在 String getAbsolutePath:返回文件或目录的绝对路径 File
getAbsolutePath():返回文件或路径的绝对路径,但是这个绝对路径是有File对象来表示 String
getName():返回文件或目录名称 File getParentFile():返回父级目录对象 String
path():返回文件或目录路径 boolean isDirectory():判断是否为目录 boolean
isFile():判断是否为文件 long length():返回文件的大小 File[]
listFiles():返回当前目录下的文件或目录 boolean mkdirs():创建多级目录
5.3 File类应用
- 案例1:创建目录
- 先创建File类对象
- 调用mkdis
- 测试是否创建好目录(利用JUinit测试)
package io;
import java.io.File;
import org.junit.Test;
public class FileTest {
/**
* 创建目录
*/
@Test
public void m01(){
File file = new File("F:\\file");
file.mkdirs();
}
}
- 案例2:创建文件
- 先创建file类对象
- 调用createNewFile
/**
* 1.判断文件 是否存在
* 2.创建新文件
* @throws IOException
*/
@Test
public void m02() throws IOException{
File dirtory = new File("F:\\file");
File file = new File(dirtory, "内部人信息.docx");
if(!dirtory.exists()){
dirtory.mkdirs();
}
file.createNewFile();
}
- 案例3:删除目录
- 先创建file类对象
- 调用delete
/**
* 删除文件
* 判断文件是否存在
*
*/
@Test
public void m03(){
File dirtory = new File("F:\\file\\music");
if(!dirtory.exists()){
return;
}
File[] files = dirtory.listFiles();//file文件夹下面的文件数据
if(files.length>0){
for(File file:files){
if(file.isFile()){
file.delete();
}
}
}
dirtory.delete();
}
- 案例4:获取目录下文件(一级目录)
- 创建一个file对象
- 调用listFiles
/**
* 获取文件目录
*
*/
@Test
public void m04(){
File dir = new File("F:\\哈利波特");
File[] files = dir.listFiles();
for(File file :files){
System.out.println(file.getName());
}
}
- 案例5:获取文件大小
- 创建File对象
- 判断是否为文件
- 计算文件大小
/**
* 获取文件大小
*/
@Test
public void m05(){
File file = new File("F:\\哈利波特\\哈利波特7哈利波特与死亡圣器(下)A.mp4");
if(file.isFile()){
System.out.println(file.length());
}
}
- 案例6:获取文件路径
- getPath,getAbsolutePath,getAbsoluteFile
/**
* 获取文件的绝对路径
*/
@Test
public void m06(){
File file = new File("F:\\哈利波特");
String path = file.getPath();
String getAbsolute = file.getAbsolutePath();
File getAbsolutePath = file.getAbsoluteFile();
System.out.println("path="+path);
System.out.println("getAbsolute="+getAbsolute);
System.out.println("getAbsolutePath="+getAbsolutePath);
}
- 案例7:递归
@Test
public void m07(){
int count = add(0,100);
System.out.println(count);
}
public int add(int sum,int n){
sum += n;
n--;
if(n==0){
return sum;
}else{
return add(sum,n);
}
}
- 案例8:获得一个目录下所有的文件和目录的输出
/**
* 获得一个目录下所有的文件和目录的输出
*/
@Test
public void m08(){
showDir(new File("F:\\毕向东25天"));
}
public void showDir(File file){
File[] files = file.listFiles();//获得一个目录下的所有文件
if(files.length == 0){
return ;
}
for(File tmp:files){
if(tmp.isFile()){
System.out.println("文件:"+tmp.getName());
}else if(tmp.isDirectory()){
System.out.println("目录:"+tmp.getName());
showDir(tmp);
}
}
}
- 案例9:能够遍历出所有文件,则我们去计算一下目录的大小是多少
@Test
public void mo9(){
showDirShow(new File("F:\\"));
System.out.println("size="+size);
}
private long size = 0;
public void showDirShow(File file){
if(file == null){//为了防止程序报空指针异常
return;
}
File[] files = file.listFiles();//获得一个目录下的所有文件
if(files == null || files.length == 0){//files==null为了防止程序报空指针异常
return ;
}
for(File tmp:files){
if(tmp.isFile()){
size += tmp.length();
System.out.println("文件:"+tmp.getName());
}else if(tmp.isDirectory()){
System.out.println("目录:"+tmp.getName());
showDirShow(tmp);
}
}
}
7.字节流结构
7.1 字节的输入流:InputStream
7.2 字节的输出流:OutputStream
7.3 重点:
7.3.1 InputStream、OutputStream都是抽象类
7.3.2 输入流的方法:read,close,available,这些方法主要是为了读取数据,关闭IO流。计算文件的大小
7.3.3 输出流的方法:write,close,flush,这些主要是为了写数据,关闭IO流,刷新缓存。
- 案例1:文件拷贝
package io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.junit.Test;
public class IOTest {
/**
* 文件拷贝
* 1.选择使用什么类型的流(字节流,字符流)
* 2.因为文件拷贝是一种二进制流,拷贝的过程通过读取字节完成拷贝操作
* 3.所以选择字节流
* @throws IOException
*/
@Test
public void m01() throws IOException{
File srcFile = new File("E:\\内部人信息20180119153855.xls");
File dirFile = new File("F:\\内部人信息20180119153855.xls");
InputStream is = new FileInputStream(srcFile);
OutputStream os = new FileOutputStream(dirFile);
//读与写的操作
byte[] b = new byte[1024];//读取过程中能够存储的字节数量
int i=-1;//判断是否读取文件结束
while((i=is.read(b)) != -1){
os.write(b, 0, i);//从缓存中从0开始输出,到i结束
}
is.close();//关闭输入流
os.flush();//清空输出流
os.close();//关闭输出流
}
}
8 字符流
字符流的结构
输入流 Reader 抽象类
输出流 Writer 抽象类
读取数据时候通过read
写入数据时通过Write
读取文件中内容
- 案例1:读取TXT文件中内容并输出到控制台中
- 读取txt文件中内容使用reader
- 读出来的内容写入到控制台中
/**
* 读文件
* @throws IOException
*/
@Test
public void m02() throws IOException{
File srcFile = new File("F:\\file\\1.txt");
Reader reader = new FileReader(srcFile);
char[] c = new char[1024];
int i=-1;//判断文件是否读取结束
while((i = reader.read(c)) != -1){
System.out.println(c);
}
reader.close();
}
- 案例2:读文件采用缓冲流来完成文件读取
/**
*读文件采用缓冲流来完成文件读取
* @throws IOException
*
*/
@Test
public void m03() throws IOException{
File srcFile = new File("F:\\file\\1.txt");
Reader reader = new FileReader(srcFile);
BufferedReader br = new BufferedReader(reader);
String content = null;//读取的内容,也判断文件是否读取完毕
while((content = br.readLine()) != null){
System.out.println(content);
}
br.close();
}
先读取到TXT文件的内容,然后此内容写入到word文档里面 输入流:BufferedReader 输出流:BufferedWriter
- 案例3:读取文件的内容并写入到word文档里面
/**
* 读取文件的内容并写入到word文档里面
* @throws IOException
*/
@Test
public void m04() throws IOException{
File srcFile = new File("F:\\file\\1.txt");
File dirFile = new File("F:\\file\\1.doc");
Reader reader = new FileReader(srcFile);
Writer writer = new FileWriter(dirFile);
BufferedReader br = new BufferedReader(reader);
BufferedWriter bw = new BufferedWriter(writer);
String content = null;
while((content = br.readLine()) != null){
bw.write(content);//将缓冲流中的数据写入到word文档中
bw.newLine();//写一个分隔符
}
br.close();
bw.flush();
bw.close();
}
请关注“知了堂学习社区”,地址:http://www.zhiliaotang.com/portal.php