【知了堂学习笔记】_Java中IO流的学习
请关注“知了堂学习社区”,地址:http://www.zhiliaotang.com/portal.php
IO流
一、概念
流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出。
二、用途
1.创建文件,创建目录
2.拷贝视频,拷贝文件
3.读取文件中内容信息
4.读取键盘输入信息
5.网络文件传输
三、分类
字节流:拷贝视频,拷贝文件,因为操作必须精确到字节
字符流:读取文件中内容,把内容进行输出
字节流和字符流的实现方式:输入流和输出流
输入流和输出流:
文件的拷贝,它完成一个动作的实现
第 1 步:选中 源文件(对应程序中 输入流)
第 2 步:拷贝操作(IO 流中 read 和 write 的操作)
第 3 步:选择拷贝的地方, 目标文件(对应程序中 输出流)
难点:不知道输入流什么用,也不知道输出流什么时候用
下图是一个描述输入流和输出流的类层次图
四、学习内容
IO 流的所有应用在 Java API 文档中 java.io 包里面
文件操作, java.io.File 类
字节流,InputStream, OutputStream
字符流,Reader,Writer
五、File类
1、File类的结构
构造方法:只提供带参数的构造方法
File(File parent, String child):在已有的路径下面去创建一个文件或者一个目录
File(String pathname):在给定路径中创建一个文件或一个目录
File(String parent, String child):在已有的路径下面去创建一个文件或者一个目录
普遍方法
boolean createNewFile():创建一个文件
boolean delete():删除文件或者目录
boolean exists():文件或目录是否存在
String getAbsolutePath():返回文件或目录的绝对路径
File getAbsoluteFile():返回文件和目录的绝对路径,但是这个绝对路径是有 File 对象来表示
String getName():返回文件或目录的名称
File getParentFile():返回父级目录对象
String path():返回文件或目录路径
boolean isDirectory():判断是否是目录
boolean isFile():判断是否是文件
long length():返回文件大小
File[] listFiles():返回当前目录下的文件或目录
boolean mkdirs():创建多级目录
2、File类的应用
1.案例:创建目录
先要创建 File 类对象
调用 mkdirs
package io;
import java.io.File;
/**
* 创建目录
* @author Lenovo
*
*/
public class Mkdirs {
public static void main(String args[]) {
File file = new File("F:\\file\\music");
file.mkdirs();
}
}
2.案例:创建文件
先创建 File 类对象
调用 createNewFile
package io;
import java.io.File;
import java.io.IOException;
/**
* 创建文件
* @author Lenovo
*
*/
public class CreateNewFile {
/**
* 1.应该判断目录是否存在
* 2.然后再去创建文件
* @param args
* @throws IOException
*/
public static void main(String args[]) throws IOException {
File directory = new File("F:\\file\\music");
File file = new File(directory, "知了堂.docx");
if(!directory.exists()) {
directory.mkdirs();
}
file.createNewFile();
}
}
3.案例:删除目录
先创建 File 类对象
调用 delete,注意如果有文件的存在,则目录删除不掉
package io;
import java.io.File;
/**
* 删除目录
* @author Lenovo
*
*/
public class DeleteDirectory {
/**
* 1.如果是多级目录怎么删除
* 2.如果是目录里有文件怎么删除
* @param args
*/
public static void main(String args[]) {
File directory = new File("F:\\file\\music");
if(!directory.exists()) {
return;//终止方法
}
File[] files = directory.listFiles();//返回music目录下的文件
if(files.length > 0) {//判断music目录下还有其他文件
for(File file : files) {
if(file.isFile()) {
file.delete();
}
}
}
directory.delete();//最后删除misic的目录,整个main方法不完整,因为music中还有子目录
}
}
4.案例:获取目录下文件(一级目录)
先创建 File 对象
调用 listFiles
package io;
import java.io.File;
/**
* 获取目录下的所有文件或者一级目录
* @author Lenovo
*
*/
public class GetOneClassDirectory {
public static void main(String args[]) {
File directory = new File("F:\\level_3\\01_学习内容");
File[] files = directory.listFiles();
for(File file : files) {
System.out.println(file.getName());
}
}
}
5.案例:获取文件大小
创建 File 对象
判断是否是文件
计算文件的大小
package io;
import java.io.File;
/**
* 获得文件的大小
* @author Lenovo
*
*/
public class GetFileSize {
public static void main(String args[]) {
File file = new File("F:\\jdk-7u80-windows-x64.zip");
if(file.isFile()) {
System.out.println(file.length());//字节大小
}
}
}
6.案例:获取文件的路径
getPath
getAbsolutePath
getAbsoluteFile
package io;
import java.io.File;
/**
* 获取文件的路径
* @author Lenovo
*
*/
public class GetFilePath {
public static void main(String args[]) {
File file = new File("F:\\level_3\\01_学习内容\\01_教学内容\\day03_线程_基础\\Thread.zip");
String path = file.getPath();
String pathAbsolutePath = file.getAbsolutePath();
File dd = file.getAbsoluteFile();//得到绝对路径下的File对象,则我们去测试一下getPath方法
System.out.println("path = " + path);
System.out.println("pathAbsolutePath = " + pathAbsolutePath);
System.out.println("dd = " + dd.getPath());
}
}
六、字节流
1、 字节流的结构
字节的输入流:InputStream
字节的输出流:OutputStream
重点如下:
InputStream,OutputStream 都是抽象类
输入流的方法:read,close, available,这些方法主要是为了读取数据,关闭 IO 流,计算文
件的大小
输出流的方法:write, close, flush,这些主要是为了写数据,关闭 IO 流,刷新缓存
2、 IO 的用法
3、文件拷贝
实现文件拷贝的思路
选择使用什么类型的流(字节流,字符流)
因为文件拷贝是一种二进制流,拷贝的过程通过读取字节完成拷贝工作
所以我们选择字节流
package io;
import java.io.*;
/**
* 文件拷贝
* 1.选择使用什么类型的流(字节流,字符流)
* 2.因为文件拷贝是一种二进制流,拷贝的过程通过读取字节完成拷贝工作
* 3.所以我们选择字节流
* @author Lenovo
*
*/
public class FileCopy {
public static void main(String args[]) throws IOException {
File srcFile = new File("F:\\level_3\\01_学习内容\\知了堂_软工_技术笔记_lv3_水印.pdf");
File dirFile = new File("E:\\知了堂_软工_技术笔记_lv3_水印.pdf");
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();
}
}
七、字符流
1、字符流的结构
输入流 Reader,抽象类
输出流 Writer,抽象类
读取数据时候通过 read
写入数据时候通过 write
2、字符流的用法
3、 读取文件中内容
案例:读取 txt 文件中内容并输出到控制台
读取 txt 文件中内容使用 Reader
读出来的内容写入到 Console,我们采用 System.out.println(…..)
package io;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
/**
* 读文件的内容
* @author Lenovo
*
*/
public class ReadFile {
public static void main(String args[]) throws IOException {
File srcFile = new File("F:\\752.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();
}
}
package io;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
/**
* 读文件的内容 采用缓冲流来完成文件读取
* @author Lenovo
*
*/
public class ReadFile2 {
public static void main(String args[]) throws IOException {
File srcFile = new File("F:\\752.txt");
Reader reader = new FileReader(srcFile);
BufferedReader br = new BufferedReader(reader);//构建缓冲流就OK了
//读操作
String content = null;//获取读取到的内容,页标明是否文件读取结束
while((content = br.readLine()) != null) {
System.out.println(content);
}
br.close();
}
}
4、写内容到文件里面
案例:先读取到 txt 文件的内容,然后将此内容写入到 word 文档
输入流 BufferedReader
输出流 BufferedWriter
package io;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
public class ReadAndWrite {
/**
* 读取文件的内容并写入到word文档里面
* @param args
* @throws IOException
*/
public static void main(String args[]) throws IOException {
File srcFile = new File("F:\\752.txt");
File dirFile = new File("F:\\752.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();
}
}
下一篇: CSS3实现八方向云台控制器器样式