IO流 综合练习
使用缓冲字符流复制文本文件
package
com.czz.test01;
import
java.io.BufferedReader;
import
java.io.BufferedWriter;
import
java.io.FileReader;
import
java.io.FileWriter;
public
class
BufferWriterDemo {
public
static
void
main(String[]
args
)
throws
Exception {
BufferedWriter
bw
=
new
BufferedWriter(
new
FileWriter(
"niling.czz"
));
BufferedReader
br
=
new
BufferedReader(
new
FileReader(
"czz.txt"
));
char
[]
chs
=
new
char
[1024];
int
len
= 0;
while
((
len
=
br
.read(
chs
)) != -1) {
bw
.write(
chs
, 0,
len
);
}
bw
.close();
br
.close();
}
}
使用9种方式复制文件
package
com.czz.IO;
import
java.io.BufferedInputStream;
import
java.io.BufferedOutputStream;
import
java.io.BufferedReader;
import
java.io.BufferedWriter;
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.FileOutputStream;
import
java.io.FileReader;
import
java.io.FileWriter;
import
java.io.InputStreamReader;
import
java.io.OutputStreamWriter;
/*
*
使用
9
种方式复制文件
* */
public
class
Demo2 {
public
static
void
main(String[]
args
)
throws
Exception {
File
file_src
=
new
File(
"czz.txt"
);
File
file_dest
=
new
File(
"nl.txt"
);
long
start
= System.
currentTimeMillis
();
// copyFile1(file_src, file_dest); //227
// copyFile2(file_src, file_dest); //86
// copyFile3(file_src, file_dest); //121
// copyFile4(file_src, file_dest); //94
// copyFile5(file_src, file_dest); //236
// copyFile6(file_src, file_dest); //102
// copyFile7(file_src, file_dest); //149
// copyFile8(file_src, file_dest); //10
copyFile9
(
file_src
,
file_dest
);
//139
System.
out
.println(System.
currentTimeMillis
() -
start
);
}
//
抽象基类
(
字符
)
字符形式
,
字节表示
public
static
void
copyFile1(File
file_src
,File
file_dest
)
throws
Exception {
FileReader
fr
=
new
FileReader(
file_src
);
FileWriter
fw
=
new
FileWriter(
file_dest
);
int
b
= 0;
while
((
b
=
fr
.read()) != -1) {
fw
.write(
b
);
}
fr
.close();
fw
.close();
}
//
抽象基类
(
字符
)
字符形式
,
字符数组表示
public
static
void
copyFile2(File
file_src
,File
file_dest
)
throws
Exception {
FileReader
fr
=
new
FileReader(
file_src
);
FileWriter
fw
=
new
FileWriter(
file_dest
);
char
[]
chs
=
new
char
[1024];
int
len
= 0;
while
((
len
=
fr
.read(
chs
)) != -1) {
fw
.write(
chs
, 0,
len
);
}
fr
.close();
fw
.close();
}
//
缓冲流
(
字符
)
缓冲区形式
字节表示
public
static
void
copyFile3(File
file_src
,File
file_dest
)
throws
Exception {
BufferedReader
br
=
new
BufferedReader(
new
FileReader(
file_src
));
BufferedWriter
bw
=
new
BufferedWriter(
new
FileWriter(
file_dest
));
int
b
= 0;
while
((
b
=
br
.read()) != -1) {
bw
.write(
b
);
}
br
.close();
bw
.close();
}
//
缓冲流
(
字符
)
缓冲区形式
字节数组表示
public
static
void
copyFile4(File
file_src
,File
file_dest
)
throws
Exception {
BufferedReader
br
=
new
BufferedReader(
new
FileReader(
file_src
));
BufferedWriter
bw
=
new
BufferedWriter(
new
FileWriter(
file_dest
));
char
[]
chs
=
new
char
[1024];
int
len
= 0;
while
((
len
=
br
.read(
chs
)) != -1) {
bw
.write(
chs
, 0,
len
);;
}
br
.close();
bw
.close();
}
//
转换流
字节流形式
字节表示
public
static
void
copyFile5(File
file_src
,File
file_dest
)
throws
Exception {
InputStreamReader
isr
=
new
InputStreamReader(
new
FileInputStream(
file_src
));
OutputStreamWriter
osw
=
new
OutputStreamWriter(
new
FileOutputStream(
file_dest
));
int
b
= 0;
while
((
b
=
isr
.read()) != -1) {
osw
.write(
b
);
}
isr
.close();
osw
.close();
}
//
转换流
字节流形式
字节数组表示
public
static
void
copyFile6(File
file_src
,File
file_dest
)
throws
Exception {
InputStreamReader
isr
=
new
InputStreamReader(
new
FileInputStream(
file_src
));
OutputStreamWriter
osw
=
new
OutputStreamWriter(
new
FileOutputStream(
file_dest
));
char
[]
chs
=
new
char
[1024];
int
len
= 0;
while
((
len
=
isr
.read(
chs
)) != -1) {
osw
.write(
chs
, 0,
len
);;
}
isr
.close();
osw
.close();
}
//
缓冲流
(
字节
)
缓冲字符流
字节表示
public
static
void
copyFile7(File
file_src
,File
file_dest
)
throws
Exception {
BufferedInputStream
bis
=
new
BufferedInputStream(
new
FileInputStream(
file_src
));
BufferedOutputStream
bos
=
new
BufferedOutputStream(
new
FileOutputStream(
file_dest
));
int
b
= 0 ;
while
((
b
=
bis
.read()) != -1) {
bos
.write(
b
);
}
bis
.close();
bos
.close();
}
//
缓冲流
(
字节
)
缓冲字符流
字节数组表示
public
static
void
copyFile8(File
file_src
,File
file_dest
)
throws
Exception {
BufferedInputStream
bis
=
new
BufferedInputStream(
new
FileInputStream(
file_src
));
BufferedOutputStream
bos
=
new
BufferedOutputStream(
new
FileOutputStream(
file_dest
));
byte
[]
chs
=
new
byte
[1024];
int
len
=0;
while
((
len
=
bis
.read(
chs
)) != -1) {
bos
.write(
chs
, 0,
len
);
}
bis
.close();
bos
.close();
}
//
读入行模式
public
static
void
copyFile9(File
file_src
, File
file_dest
)
throws
Exception {
BufferedReader
br
=
new
BufferedReader(
new
FileReader(
file_src
));
BufferedWriter
bw
=
new
BufferedWriter(
new
FileWriter(
file_dest
));
String
line
=
null
;
while
((
line
=
br
.readLine()) !=
null
) {
bw
.write(
line
);
bw
.newLine();
}
br
.close();
bw
.close();
}
}
将
ArrayList
中字符串存储到文本文件
思路:
1.ArrayList中存储的是字符串,泛型中应该使用的是String
2.创建字符输出流对象(文本文件,说明最好使用的是缓冲区字符流)
3.遍历集合,将元素写入到字符流中即可,最好添加换行
package
com.czz.test03;
/*
*
将
ArrayList
中字符串存储到文本文件
思路:
1.ArrayList
中存储的是字符串,泛型中应该使用的是
String
2.
创建字符输出流对象(文本文件,说明最好使用的是缓冲区字符流)
3.
遍历集合,将元素写入到字符流中即可,最好添加换行
* */
import
java.io.BufferedWriter;
import
java.io.FileWriter;
import
java.util.ArrayList;
public
class
ArrayListCopyDemo {
public
static
void
main(String[]
args
)
throws
Exception {
ArrayList<String>
list
=
new
ArrayList<>();
list
.add(
"hello"
);
list
.add(
"world"
);
BufferedWriter
bw
=
new
BufferedWriter(
new
FileWriter(
"czz.txt"
));
for
(String
string
:
list
) {
bw
.write(
string
);
bw
.newLine();
}
bw
.close();
}
}
把一个文件中出现的数字排序,存储到一个sort.txt文本文件中,sort.txt中一个数字占一行
package
com.czz.test03;
import
java.io.BufferedReader;
import
java.io.BufferedWriter;
import
java.io.FileReader;
import
java.io.FileWriter;
import
java.util.ArrayList;
import
java.util.Collections;
/*
* numbers.txt
* 10 20 5 12
8 6 33 7
3
99 25
*
*
*
把文件中出现的数字排序
,
存储到一个
sort.txt
文本文件中
*/
public
class
ArrayListCopyDemo2 {
public
static
void
main(String[]
args
)
throws
Exception {
//
先读文件内容
BufferedReader
br
=
new
BufferedReader(
new
FileReader(
"numbers.txt"
));
//
创建集合
,
以备将文件内容存入到集合
ArrayList<Integer>
list
=
new
ArrayList<>();
String
line
=
null
;
while
((
line
=
br
.readLine()) !=
null
){
//
对数字进行切割
.
切割符为空格
String[]
numbers
=
line
.split(
" +"
);
//
遍历
,
将字符串数组中的数字全部转换为整型
for
(String
num
:
numbers
) {
//static
int
parseInt(String s)
将字符串参数作为有符号的十进制整数进行解析。
list
.add(Integer.
parseInt
(
num
));
//parseInt()
函数可解析一个字符串
,
并返回一个整数
}
}
br
.close();
Collections.
sort
(
list
);
//
根据元素的自然顺序
对指定列表按升序进行排序。
//
将内容写入到新的文件下
BufferedWriter
bw
=
new
BufferedWriter(
new
FileWriter(
"sort.txt"
));
//
对集合进行遍历
for
(Integer
i
:
list
) {
//
将变量转换为字符串形式
bw
.write(
i
.toString());
bw
.newLine();
}
bw
.close();
}
}
从键盘上录入一个文本文件的路径,把它的内容输出到控制台
从键盘上录入源文件路径,目标文件路径,实现文本文件的复制
package
com.czz.test03;
/*
*
从键盘录入两个路径
,
一个作为源文件
,
一个作为目标文件
,
实现文本文件的复制
* */
import
java.io.BufferedReader;
import
java.io.BufferedWriter;
import
java.io.FileReader;
import
java.io.FileWriter;
import
java.util.Scanner;
public
class
ArrayListCopyDemo3 {
public
static
void
main(String[]
args
)
throws
Exception {
Scanner
sc
=
new
Scanner(System.
in
);
System.
out
.println(
"
请输入源文件路径
"
);
String
src
=
sc
.next();
System.
out
.println(
"
输入目标文件路径
:"
);
String
dest
=
sc
.next();
BufferedReader
br
=
new
BufferedReader(
new
FileReader(
src
));
BufferedWriter
bw
=
new
BufferedWriter(
new
FileWriter(
dest
));
String
line
=
null
;
while
((
line
=
br
.readLine()) !=
null
) {
bw
.write(
line
);
bw
.newLine();
}
br
.close();
bw
.close();
}
}
有一个文本文件:每行代表一个文本文件的路径,内容如下:
c:/hello.txt
c:/hello2.txt
c:/names.txt
c:/demo/a.txt
编程实现:将此文件中的所有路径代表的文件按顺序拷贝到一个汇总文件中:
格式如下:
文件名:c:/hello.txt 内容是:
...
文件名:c:/hello2.txt 内容是:
...
package
com.czz.test03;
import
java.io.BufferedReader;
import
java.io.BufferedWriter;
import
java.io.FileReader;
import
java.io.FileWriter;
/*
*
将一个文本文件中的路径所代表的文件内容汇总到一个文件中
*/
public
class
ArrayListCopyDemo4 {
public
static
void
main(String[]
args
)
throws
Exception {
//
读文件内容
BufferedReader
br
=
new
BufferedReader(
new
FileReader(
"list.txt"
));
//
汇总文件
FileWriter(File file, boolean append)
根据给定的
File
对象构造一个
FileWriter
对象。
BufferedWriter
bw
=
new
BufferedWriter(
new
FileWriter(
"sum.txt"
,
true
));
String
path
=
null
;
while
((
path
=
br
.readLine()) !=
null
){
//
封装数据源
BufferedReader
br2
=
new
BufferedReader(
new
FileReader(
path
));
bw
.write(
path
);
bw
.newLine();
bw
.write(
"---------------------"
);
bw
.newLine();
copyFile
(
br2
,
bw
);
br2
.close();
}
br
.close();
//
注意关闭的顺序
bw
.close();
//
注意关闭的顺序
}
private
static
void
copyFile(BufferedReader
br2
, BufferedWriter
bw
)
throws
Exception {
String
line
=
null
;
while
((
line
=
br2
.readLine()) !=
null
){
bw
.write(
line
);
bw
.newLine();
}
}
}
把文本文件中的数据放入到集合中
分析:
1.
数据源是文本文件,考虑使用字符流(优先考虑
BufferedReader
)
2.
目的地是集合,并且元素是字符串,考虑使用
ArrayList
3.
读取文件的一行文本,添加到集合中
package
com.czz.test03;
import
java.io.BufferedReader;
import
java.io.FileReader;
import
java.util.ArrayList;
/*
*
把文本文件中的数据放到集合中
*/
public
class
ArrayListCopyDemo5 {
public
static
void
main(String[]
args
)
throws
Exception {
BufferedReader
br
=
new
BufferedReader(
new
FileReader(
"sum.txt"
));
ArrayList<String>
list
=
new
ArrayList<>();
String
line
=
null
;
while
((
line
=
br
.readLine()) !=
null
){
list
.add(
line
);
}
br
.close();
// System.out.println(list.size());
for
(String
string
:
list
) {
System.
out
.println(
string
);
}
}
}