黑马程序员——Java基础视频笔记(七):IO操作
2015-05-09 06:51
645 查看
------- android培训、java培训、期待与您交流! ----------
基础视频笔记的第七部分:Java中的 I O 操作:
1、IO简介: IO 也写作 “I/O”可以理解为In 和 Out,输入和输出;
IO 流,作用:读写设备上的数据,硬盘文件、内存、键盘、网络
根据数据的走向,可分为:输入流、输出流
根据处理的数据类型,可分为:字节流、字符流;
字节流:可以处理所有类型的数据,如MP3、图片、文字、视频等等;
在读取时,读到一个字节,就返回一个字节;
*对应的类都是以Stream结尾的。
字符流:只能处理纯文本数据,如txt文本等。
在读取时,读到一个或多个字节,先查找指定的编码表,
然后将插到的字符返回。
*对应的类都是以Reader或Writer结尾;
2、字节、字符、编码的区别
1、字节是通过网络传输信息、或在硬盘、内存中存储信息的单位,
是计算机信息技术用于计量存储容量和传输容量的一种计量单位;
1字节 = 8位二进制,即一个8位的二进制数;,是一个很具体的存储空间;
0x01,0x45,0xFA
2、字符(char),是人们使用的记号,抽象意义上的一个符号;
如:'1' '中' '$' '¥'
3、编码(Charset),“编码”也称作“字符集”,各个国家和地区所
制定的不同ANSI编码标准中,都只规定了各自语言所需的“字符”;
比如:汉字标准 GB2312 中,就没有规定韩国语字符怎样存储
ANSI 编码标准所规定的内容包含两层含义:
1、使用哪些字符。也就是说哪些汉字,字母和符号,会被收入标准中,
所包含的字符的集合,就叫做“字符集”;
2、规定每个“字符”分别用一个字节还是用多个字节来存储,用哪些
字节来存储,这个规定就叫做“编码”;
3、各个国家和地区在指定编码标准的时候,“字符的集合”和编码一般
都是同时制定的,
因此,平常我们所说的“字符集”,比如GB2312,GBK,JIS等,除了
“字符的合集”这层含义之外,也包含了“编码”的含义;
3、使用字节流读写数据:
4、使用带缓冲的字节流读写数据:
5、使用字符流读取文件数据:
6、使用带有缓冲的字符流读写数据:
* 为什么用带缓冲的字符流?
inputstreanreader 没有读取字符串的方法
outputstreamwriter 没有写出一行、换行的方法
* 怎么使用:
BufferedReader
BufferedWriter
7、FileReader 和 FileWriter
8、RandomAccessFile 随机文件读写:
* 按照需求,对文件的特定位置,进行读写操作
MultiwriteFile.java
File file = new File("D:/test.txt");
启动线程:
9、用Apache 的IO,操作文件
登陆 apache.org
左侧找到: Common——Component——IO——Download
下载 Commons IO 2.4
把 commons-io-2.4.jar 复制到当前项目路径下,即可调用其中的类和方法。
基础视频笔记的第七部分:Java中的 I O 操作:
1、IO简介: IO 也写作 “I/O”可以理解为In 和 Out,输入和输出;
IO 流,作用:读写设备上的数据,硬盘文件、内存、键盘、网络
根据数据的走向,可分为:输入流、输出流
根据处理的数据类型,可分为:字节流、字符流;
字节流:可以处理所有类型的数据,如MP3、图片、文字、视频等等;
在读取时,读到一个字节,就返回一个字节;
*对应的类都是以Stream结尾的。
字符流:只能处理纯文本数据,如txt文本等。
在读取时,读到一个或多个字节,先查找指定的编码表,
然后将插到的字符返回。
*对应的类都是以Reader或Writer结尾;
2、字节、字符、编码的区别
1、字节是通过网络传输信息、或在硬盘、内存中存储信息的单位,
是计算机信息技术用于计量存储容量和传输容量的一种计量单位;
1字节 = 8位二进制,即一个8位的二进制数;,是一个很具体的存储空间;
0x01,0x45,0xFA
2、字符(char),是人们使用的记号,抽象意义上的一个符号;
如:'1' '中' '$' '¥'
3、编码(Charset),“编码”也称作“字符集”,各个国家和地区所
制定的不同ANSI编码标准中,都只规定了各自语言所需的“字符”;
比如:汉字标准 GB2312 中,就没有规定韩国语字符怎样存储
ANSI 编码标准所规定的内容包含两层含义:
1、使用哪些字符。也就是说哪些汉字,字母和符号,会被收入标准中,
所包含的字符的集合,就叫做“字符集”;
2、规定每个“字符”分别用一个字节还是用多个字节来存储,用哪些
字节来存储,这个规定就叫做“编码”;
3、各个国家和地区在指定编码标准的时候,“字符的集合”和编码一般
都是同时制定的,
因此,平常我们所说的“字符集”,比如GB2312,GBK,JIS等,除了
“字符的合集”这层含义之外,也包含了“编码”的含义;
3、使用字节流读写数据:
// 读取 FileInputStream fis = new FileInputStream(); byte[] input = new byte[20]; fis.read(input); // 对读到的字节 解码 String inputString = new String(input,"UTF-8"); System.out.println(intpuStream);
4、使用带缓冲的字节流读写数据:
*读取效率高效; FileInputStream fis = new FileInputStream("movie.mp4") BufferedInputStream bis = new BufferedInputStream(fis,1000000);// 缓冲区的优化,数值调大 // 读写次数减少,速度加快 // 拷贝文件 FileOutputStream fos = new FileOutputStream("movie_new.mp4"); BufferedOutputStream bos = new BufferedOutputStream(fos,1000000); byte[] input = new byte[100000]; // 数组大小要针对文件大小优化,大文件对应的数组就要大一些 //计时器 long before = System.currentTimeMillis(); //判断读取是否完成 while(bis.read(input) != -1){ bos.write(input); count++; } //关闭流 bis.close(); fis.close(); bos.close(); fos.close(); // System.out.println(System.curentTimeMillis()-before+"ms"); // System.out.println("读写了"+count+"次");
5、使用字符流读取文件数据:
* 读取文件内容输出; File file = new File("Java.txt"); FileInputStream fis = new FileInputStream(file); // 字节流转字符流,字符集设为 UTF-8 InputStreamReader isr = new InputStreamReader(fis,"UTF-8"); char[] input = new char[100]; int lent = 0; // 判断是否到文件末尾 while((l = isr.read(input)) != -1){ // 为-1 到末尾,输出input数组 // 默认会强制调用toString()方法 System.out.print(input); // 也可以写为: // String() 有重载带偏移量、长度的方法 String(bytes,int offset,int length); System.out.print(new String(input,0,lent)); } isr.close(); fis.close(); *文本文件内容拷贝(写入), fis FileOutputStream fos = new FileOutputStream("test_new.txt"); isr OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8"); char[] input = new char[100]; int length = 0; while((length = isr.read(input)) != -1){ osw.write(input); } isr.close(); fis.close(); osw.close(); fos.close();
6、使用带有缓冲的字符流读写数据:
* 为什么用带缓冲的字符流?
inputstreanreader 没有读取字符串的方法
outputstreamwriter 没有写出一行、换行的方法
* 怎么使用:
BufferedReader
BufferedWriter
7、FileReader 和 FileWriter
FileReader 读取文本数据 FileReader fr = new FileReader("java.txt"); BufferedReader br = new BufferedReader(fr); //写文件 FileWriter fw = new FileWriter("java_new.txt"); BufferedWriter bw = new BufferedWriter(fw); String line; while((line = br.readline()) != null{ bw.write(line+"\n"); } bw.flush(); bw.close(); fw.close();
8、RandomAccessFile 随机文件读写:
* 按照需求,对文件的特定位置,进行读写操作
MultiwriteFile.java
File file = new File("D:/test.txt");
package RandomAccessFile; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; /* Block 区块 * 1 2 3 4 5 6 * |------------|------------|------------|------------|------------| * 0xL 1xL 2xL 3xL 4xL 5XL * * 传入的 block值是从 1 开始的 * 当前文件指针是从 0 开始的 * 0xL 代表这个区块的大小为100个字节 * * 公式写为 (block-1)*L * * 可以用于多线程文件下载,多线程传输,也可用于读取特定内容 */ public class WriteFile extends Thread { File file; int block; // 定义一个区块 int L = 100; // 定义区块的长度 public WriteFile(File f, int b){ this.file = f; this.block = b; } public void run() { try { RandomAccessFile raf = new RandomAccessFile(file, "rw"); raf.seek((block-1)*L); // 文件 指针头 raf.writeBytes("That's amazing~!"); for (int i = 0; i <= 20; i++) { raf.writeBytes("-"); } raf.writeBytes("\n"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
启动线程:
package RandomAccessFile; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; public class MultiWriteFile { static File file = new File("D:/FileDemo/test.txt"); public static void main(String[] args) { try { file.createNewFile(); /* if(file.exists()){ file.delete(); } // 启动 WriteFile类的线程 new WriteFile(file, 1).start(); new WriteFile(file, 2).start(); new WriteFile(file, 3).start(); new WriteFile(file, 4).start(); new WriteFile(file, 5).start(); */ // 读取文件中某一段 RandomAccessFile raf = new RandomAccessFile(file, "r"); // 设定文件指针位置 raf.seek(300); // 399 代表第四行 0 1 2 3 byte[] bt = new byte[20]; // 读取第四行前20个字节 // 读取文件的相应位置 raf.read(bt); // 把字节 转换为 字符 String in = new String(bt); System.out.println(in); } catch (IOException e) { e.printStackTrace(); } } }
9、用Apache 的IO,操作文件
登陆 apache.org
左侧找到: Common——Component——IO——Download
下载 Commons IO 2.4
把 commons-io-2.4.jar 复制到当前项目路径下,即可调用其中的类和方法。
相关文章推荐
- Java基础视频笔记(七):IO操作
- 黑马程序员——Java基础视频笔记(六):本地文件操作
- 黑马程序员——Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律
- Java基础视频教程第04天_学习笔记之数组常见操作
- Java基础复习笔记系列 七 IO操作
- Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律 (黑马程序员)
- 黑马程序员——Java基础视频笔记(一)
- 黑马程序员——Java基础视频笔记(二)
- 黑马程序员——Java基础视频笔记(三)
- 黑马程序员——Java基础视频笔记(四):泛型
- 黑马程序员——Java基础视频笔记(五):集合详解
- 黑马程序员——Java基础视频笔记(八):多线程编程
- 黑马程序员 java 基础 毕向东 面向对象 IO操作 File Properties PrintWriter PrintStream 应用
- 黑马程序员,看Java基础视频笔记:反射
- 黑马程序员,看Java基础视频笔记:基础类型的大小范围和类型转换
- 黑马程序员——JAVA笔记——IO操作
- 黑马程序员——JAVA笔记——IO操作(2)
- 黑马程序员——Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律
- 黑马程序员——Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律
- 黑马程序员————Java基础日常笔记---IO其他流