黑马程序员-----IO流
2015-10-01 19:07
330 查看
-------
android培训、java培训、期待与您交流! ----------
IO流: 用来对本地文件或网络中的资源进行读与写数据的技术
· I: Input 输入(从文件中读取数据)
O: Output 输出(把数据写到文件中)
IO流的分类:
流的方向划分:输入流,输出流
流中的数据划分:字节流,字符流
IO流的划分
字节流:
字节输入流: InputStream, 字节输入流的所有类的超类, 抽象类
|- FileInputStream : 操作文件的字节输入流
|- FilterInputStream
|- BufferedInputStream : 高效的字节输入流
字节输出流: OutputStream, 字节输出流的所有类的超类, 抽象类
|- FileOutputStream: 操作文件的字节输出流
|- FilterOutputStream
|- BufferedOutputStream : 高效的字节输出流
字符流:
字符输入流: Reader
|- 转换流 InputStreamReader
|- FileReader 操作文件的字符输入流便捷类
|-BufferedReader 高效流
字符输出流: Writer
|- 转换流 OutputStreamWriter
|- FileWriter 操作文件的字符输出流便捷类
|-BufferedWriter 高效流
IO流中操作文件的步骤:
1,数据源
2,目的地
3,读数据
4,写数据
5,关闭流
写数据到文件的步骤:
1,打开文件
2,写数据
3,关闭文件
从文件中读数据的步骤:
1,打开文件
2,读数据
3,关闭文件
从文件中读取数据的两种方式
方式1: 一次读取一个字节
关键代码:
InputStream is = new FileInputStream("fos.txt");
int ch = -1;
while ( (ch = is.read()) != -1 ){
//写数据
}
方式2: 一个读取一个字节数组
关键代码:
InputStream is = new FileInputStream("fos.txt");
byte[] buffer = new byte[1024];//存储每次从文件中的读取到的新字节
int len = -1;// 记录每次从文件中读取新字节的个数
while ( (len = is.read(buffer)) != -1) {
//写数据
}
转换流
OutputStreamWriter 字符输出流--写数据
InputStreamReader 字符输入流-- 读数据
文件: File
方法:
public boolean mkdir() 创建文件夹
public boolean mkdirs() 创建多层文件夹
public boolean createNewFile() 创建文件
public boolean isFile() 判断是否是文件
public boolean isDirectory() 判断是否为文件夹
public long length() 返回文件的长度
public String getAbsolutePath() 返回文件的绝对路径
public String getName() 返回文件的名称(包含后缀名)
public File[] listFiles() 返回当前目录下所有的File对象
public File[] listFiles( FilenameFilter filter) 返回当前目录下满足条件的File对象
开启流的自动刷新
PrintWriter( OutputStream os, boolean autoFlush)
PrintWriter( Writer w, boolean autoFlush)
开启流的数据自动追加
FileOutputStream( String namePath, boolean append )
FileOutputStream( File file, boolean append )
FileWriter( String namePath, boolean append )
FileWriter( File file, boolean append )
代码
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/*
* 案例: 复制文件夹(包含子文件夹)
*
* 需求: 将 E:\resource文件夹 复制到 项目根目录的YesDir文件夹中
*
* 分析:
* 1,指定数据源 E:\resource
* 2,指定目的地 YesDir
* 3,复制文件夹
* a, 创建目的地文件夹
* b, 获取到数据源中每一个File对象
* c, 判断当前File是否为 文件夹
* 是: 文件夹
* 递归,完成子文件夹的复制
* 否: 文件
* 完成文件复制
*
*/
public class CopyDirectorys {
public static void main(String[] args) throws IOException {
//1,指定数据源 E:\resource
File srcPath = new File("E:\\resource");
//2,指定目的地 YesDir
File destPath = new File("YesDir");
//3,复制文件夹
copyDirectorys(srcPath, destPath);
}
//复制文件夹
private static void copyDirectorys(File srcPath, File destPath) throws IOException {
//a, 创建目的地文件夹
destPath.mkdir();
//b, 获取到数据源中每一个File对象
File[] files = srcPath.listFiles();
for (File file : files) {
//c, 判断当前File是否为 文件夹
if (file.isDirectory()) {
//file = E:\resource\各种专治 --- 数据源
//dest = YesDir\各种专治 --- 目的地
//是: 文件夹, 递归,完成子文件夹的复制
File dest = new File(destPath, file.getName());
copyDirectorys(file, dest);
} else {
//file = E:\resource\Demo.java
//dest = YesDir\Demo.java
//否: 文件, 完成文件复制
File dest = new File(destPath, file.getName());
copyFile(file, dest);
}
}
}
//复制文件
private static void copyFile(File file, File dest) throws IOException {
//数据源
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
//目的地
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dest));
//读数据
byte[] buffer= new byte[1024];
int len = -1;
while ((len = bis.read(buffer)) != -1) {
//写数据
bos.write(buffer, 0, len);
}
//关闭流
bos.close();
bis.close();
}
}
总结
IO流操作的时候要注意字符编码相同,否则会出现乱码现象
java中只支持字节流与字符流数据的传输,而我们想 传输 java基本数据类型的数据
使用数据输入输出流,将基本的字节流进行包装,然后就可以实现传输java基本数据类型的数据了
字符流使用了字节流读到一个或多个字节(一个
中文对应的字节数是两个,在
UTF-8
码表中是
3
945c
个字节)时,先去查指定的编码表
android培训、java培训、期待与您交流! ----------
IO流: 用来对本地文件或网络中的资源进行读与写数据的技术
· I: Input 输入(从文件中读取数据)
O: Output 输出(把数据写到文件中)
IO流的分类:
流的方向划分:输入流,输出流
流中的数据划分:字节流,字符流
IO流的划分
字节流:
字节输入流: InputStream, 字节输入流的所有类的超类, 抽象类
|- FileInputStream : 操作文件的字节输入流
|- FilterInputStream
|- BufferedInputStream : 高效的字节输入流
字节输出流: OutputStream, 字节输出流的所有类的超类, 抽象类
|- FileOutputStream: 操作文件的字节输出流
|- FilterOutputStream
|- BufferedOutputStream : 高效的字节输出流
字符流:
字符输入流: Reader
|- 转换流 InputStreamReader
|- FileReader 操作文件的字符输入流便捷类
|-BufferedReader 高效流
字符输出流: Writer
|- 转换流 OutputStreamWriter
|- FileWriter 操作文件的字符输出流便捷类
|-BufferedWriter 高效流
IO流中操作文件的步骤:
1,数据源
2,目的地
3,读数据
4,写数据
5,关闭流
写数据到文件的步骤:
1,打开文件
2,写数据
3,关闭文件
从文件中读数据的步骤:
1,打开文件
2,读数据
3,关闭文件
从文件中读取数据的两种方式
方式1: 一次读取一个字节
关键代码:
InputStream is = new FileInputStream("fos.txt");
int ch = -1;
while ( (ch = is.read()) != -1 ){
//写数据
}
方式2: 一个读取一个字节数组
关键代码:
InputStream is = new FileInputStream("fos.txt");
byte[] buffer = new byte[1024];//存储每次从文件中的读取到的新字节
int len = -1;// 记录每次从文件中读取新字节的个数
while ( (len = is.read(buffer)) != -1) {
//写数据
}
转换流
OutputStreamWriter 字符输出流--写数据
InputStreamReader 字符输入流-- 读数据
文件: File
方法:
public boolean mkdir() 创建文件夹
public boolean mkdirs() 创建多层文件夹
public boolean createNewFile() 创建文件
public boolean isFile() 判断是否是文件
public boolean isDirectory() 判断是否为文件夹
public long length() 返回文件的长度
public String getAbsolutePath() 返回文件的绝对路径
public String getName() 返回文件的名称(包含后缀名)
public File[] listFiles() 返回当前目录下所有的File对象
public File[] listFiles( FilenameFilter filter) 返回当前目录下满足条件的File对象
开启流的自动刷新
PrintWriter( OutputStream os, boolean autoFlush)
PrintWriter( Writer w, boolean autoFlush)
开启流的数据自动追加
FileOutputStream( String namePath, boolean append )
FileOutputStream( File file, boolean append )
FileWriter( String namePath, boolean append )
FileWriter( File file, boolean append )
代码
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/*
* 案例: 复制文件夹(包含子文件夹)
*
* 需求: 将 E:\resource文件夹 复制到 项目根目录的YesDir文件夹中
*
* 分析:
* 1,指定数据源 E:\resource
* 2,指定目的地 YesDir
* 3,复制文件夹
* a, 创建目的地文件夹
* b, 获取到数据源中每一个File对象
* c, 判断当前File是否为 文件夹
* 是: 文件夹
* 递归,完成子文件夹的复制
* 否: 文件
* 完成文件复制
*
*/
public class CopyDirectorys {
public static void main(String[] args) throws IOException {
//1,指定数据源 E:\resource
File srcPath = new File("E:\\resource");
//2,指定目的地 YesDir
File destPath = new File("YesDir");
//3,复制文件夹
copyDirectorys(srcPath, destPath);
}
//复制文件夹
private static void copyDirectorys(File srcPath, File destPath) throws IOException {
//a, 创建目的地文件夹
destPath.mkdir();
//b, 获取到数据源中每一个File对象
File[] files = srcPath.listFiles();
for (File file : files) {
//c, 判断当前File是否为 文件夹
if (file.isDirectory()) {
//file = E:\resource\各种专治 --- 数据源
//dest = YesDir\各种专治 --- 目的地
//是: 文件夹, 递归,完成子文件夹的复制
File dest = new File(destPath, file.getName());
copyDirectorys(file, dest);
} else {
//file = E:\resource\Demo.java
//dest = YesDir\Demo.java
//否: 文件, 完成文件复制
File dest = new File(destPath, file.getName());
copyFile(file, dest);
}
}
}
//复制文件
private static void copyFile(File file, File dest) throws IOException {
//数据源
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
//目的地
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dest));
//读数据
byte[] buffer= new byte[1024];
int len = -1;
while ((len = bis.read(buffer)) != -1) {
//写数据
bos.write(buffer, 0, len);
}
//关闭流
bos.close();
bis.close();
}
}
总结
IO流操作的时候要注意字符编码相同,否则会出现乱码现象
java中只支持字节流与字符流数据的传输,而我们想 传输 java基本数据类型的数据
使用数据输入输出流,将基本的字节流进行包装,然后就可以实现传输java基本数据类型的数据了
字符流使用了字节流读到一个或多个字节(一个
中文对应的字节数是两个,在
UTF-8
码表中是
3
945c
个字节)时,先去查指定的编码表
相关文章推荐
- 面试算法题
- 【超坑人的面试题】switch没有break
- 黑马程序员-----Map双列集合
- 黑马程序员——java学习笔记--枚举
- 黑马程序员——java学习笔记--反射机制
- 黑马程序员——java学习笔记--日期操作类
- 黑马程序员——java学习笔记--正则表达式
- 黑马程序员——抽象类,接口总结
- 黑马程序员——java学习笔记--字符串
- 黑马程序员——java学习笔记--数组
- 代码面试之哈希表
- 黑马程序员-----Foundation框架学习之NSString
- 黑马程序员—面向对象知识总结(二)
- 程序员所要具备的基本素质
- 程序员初学机器学习的四种方式
- 美团+百度+网易+去哪儿+58面试总结
- 面试宝典
- 30到运维面试题
- 程序员能力矩阵 Programmer Competency Matri
- 一个女程序员的心酸和无奈!