Java基础视频笔记(七):IO操作
2007-07-08 19:57
573 查看
基础视频笔记的第七部分: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 复制到当前项目路径下,即可调用其中的类和方法。
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基础视频笔记(六):本地文件操作
- Java基础复习笔记系列 七 IO操作
- IO流02--毕向东JAVA基础教程视频学习笔记
- Java基础视频教程第04天_学习笔记之数组常见操作
- Java IO 操作基础2---操作 ZIP 压缩文件
- [学习笔记]Java文件IO操作------实现对文件的读取与写入
- JAVA 基础 (四) IO操作
- JAVA高级视频_IO输入与输出02、03 RandomAccessFile 学习笔记
- JAVA高级视频02_IO输入与输出 06 PipedInputStream和PipedOutPutStream 学习笔记
- 黑马程序员——Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律
- PHP特级视频教程 笔记心得 第十七集 mysql调优,mysql优化 MySQL基础操作(一)
- 黑马程序员_毕向东_Java基础视频教程学习笔记(二十三)
- 黑马程序员————Java基础日常笔记---IO其他流
- 黑马程序员_毕向东_Java基础视频教程学习笔记(十九)
- 黑马程序员_毕向东_Java基础视频教程学习笔记(二十)
- 黑马程序员_毕向东_Java基础视频教程学习笔记(二十一)
- 传智 刘意 2015年Java基础视频-深入浅出精华版 笔记 day24~day26(2016年4月26日13:11:30)
- 传z播客 刘意_2015年Java基础视频笔记(day18~day20(2016年3月20日14:36:05)