IO流_File类
流(stream):流是一连串流动的数据(字节、字符),以先进先出的方式发送的信息的通道中。
输入流
数据从源数据源流入程序的过程称为输入流。可以理解为从源数据源读取数据到程序的过程
输出流
数据从程序流出到目的地的过程称为输出流。可以理解为把数据从程序写入目的地过程
数据源一般指提供数据的原始媒介,一般常见有文件、数据库、云端、其他硬件等能提供数据的媒介。
流的分类
【1】按照流向分为输入流和输出流
【2】按照处理单元分为字节流和字符流
【3】 按照功能分为节点流和转换流
2.0 InputStream/OutputStream
InputStream是所有字节输入流的抽象父类,
【1】提供了read读取一个字节
【2】read(byte[] buf) 读取一定量的字节到缓冲区数组 buf中。
OutputStream 是所有字节输出流的抽象父类,提供了
【1】write() 写入一个字节
【2】write(byte[] buf) 写入一定量的字节到输出流
注意:
【1】字符串写入文件时一定会存在编码问题
【2】使用utf8编码写入文件时,如果不含中文时,win系统会对文件的编码造成误判。
【3】通过字节流写入文件时,向管道写入一个字节,该字节立即写入文件中。
总结
【1】InputStream/OutputStream 用于字节的读写。主要用于读取二进制文件(图片、音频、视频),也可以读取文件性文件。
3.0 File类
FileInputStream 文件字节输入流,专门用于从文件中读取字节到程序内存中。
FileOutputStream 文件字节输出流,专门用于从内存中写入字节到文件中。
Filel类在java中表示(带路径的)文件或者目录
public static void main(String[] args) { // 给定路径创建File对象
// File file = new File("D:"+File.separator+"javatest"+File.separator+"a.txt");
File file = new File("d:\\javatest\\b.mp3");
System.out.println(file); // 文件基本属性
System.out.println(file.canExecute());
System.out.println(file.canRead());
System.out.println(file.canWrite()); // 文件的创建、删除
if(!file.exists()) { boolean r;
try {
r = file.createNewFile();
if(r) {
System.out.println("文件创建成功");
}
} catch (IOException e) {
e.printStackTrace();
}
} // 删除文件
file.delete();
}
File的路径相关
public static void main(String[] args) { File file = new File("d:\\javatest\\a");
// File file = new File("a.txt"); // 获取file的绝对路径
System.out.println(file.getAbsolutePath());
// 获取file的创建时的路径字符串
System.out.println(file.getPath());
// 获取文件或者目录的名字
System.out.println(file.getName());
// 获取文件或者目录的父目录
System.out.println(file.getParent()); }
File目录的创建
public static void main(String[] args) { File file = new File("d:\\javatest\\c\\d\\e"); if(!file.exists()) {
boolean r; try {
// 一次只能创建一个目录
r = file.mkdir(); // 一次能创建多个目录
r = file.mkdirs();
if(r) {
System.out.println("目录创建成功");
}
} catch (Exception e) {
e.printStackTrace();
} }
}
FileReader 文件字符输入流
【1】专门用于读取默认字符编码文本性文件。
FileWriter 文件字符输出流,
【2】专门用于写入默认字符编码的文本性文件。为了提高效率,FileWriter内部存在一个字节缓冲区,用于对待写入的字符进行统一编码到字节缓冲区,一定要在关闭流之前,调用flush方法刷新缓冲区。
4.0 转换流
InputStreamReader 继承于Reader,是字节流通向字符流的桥梁,可以把字节流按照指定编码 解码 成字符流。
OutputStreamWriter 继承于Writer,是字符流通向字节流的桥梁,可以把字符流按照指定的编码 编码 成字节流。
注意:
【1】win平台默认的utf8编码的文本性文件带有BOM,java转换流写入的utf8文件不带BOM。所以用java读取手动创建的utf8文件会出现一点乱码(?hello中国,?是bom导致的)
【2】一句话:用字符集编码,一定用字符集解码!!
5.0 BufferedReader/BufferedWriter
6.0 标准输入输出流
【1】源数据源是标准输入设备(键盘、鼠标、触摸屏)等输入设备。在java中用System.in 得到一个InputStream字节输入流。
需求:在控制台输入一句话,然后原样输出
public static void main(String[] args) throws IOException {
// 需求:输入一句话,然原样输出
InputStream in = System.in; byte[] buf = new byte[1024];
int len;
// buf中包含回车和换行
len = in.read(buf); String str = new String(buf, 0, len);
// System.out.println(Arrays.toString(buf));
System.out.println(str);
}
注意:
[1] 标准输入流以字节流流入内存,如果在控制台中输入字符,字符以默认编码(win简体:gbk)编码成字节进入标准输入流。
public static void main(String[] args) throws IOException {
// 需求:从控制台高效读取一行数据。把一首诗写入文件。 InputStream in = System.in;
InputStreamReader reader = new InputStreamReader(in, "GBK");
BufferedReader br = new BufferedReader(reader); File file = new File("d:\\javatest\\k.txt");
FileWriter writer = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(writer); String end = "bye";
while(true) {
String line = br.readLine();
if(line.equals(end)) {
break;
} bw.write(line);
// bw.newLine();
} bw.flush(); bw.close();
writer.close(); }
7.0 标准输出流(PrintStream)
数据目的地是标准输出设备(显示器)等输出设备。在java中用System.out得到一个PrintStream 字节输出流(字节打印流)。提供了更强大的
打印方法用于打印各种数据类型。
最新文章
- 学习笔记 :DrawText
- SQL常见的系统存储过程
- ADO.NET Entity Framework
- HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误
- QTableWidget 使用及美化_QtableWidget_QtableView滚动条宽度及样式
- UNTIY3D接入91SDK的办法
- 安装max plugin wizard
- C++单元测试2
- T-SQL 游标
- cocos2d-x中处理touch事件
- Cordova/Ionic Android 开发环境搭建 - Windows系统
- windows下golang实现Kfaka消息发送及kafka环境搭建
- idea中的一些快捷键,未完待续......
- Python入门-编写抓取网站图片的爬虫-正则表达式
- Pascal语言(存档)
- ubuntu16.04.1下安装mysql
- English trip -- Review Unit1 Personal Information 个人信息
- Java虚拟机笔记(三):垃圾收集算法
- 160505、oracle 修改字符集 修改为ZHS16GBK
- Entity Framework技术系列