目录
- 1.IO概述
- 1.1流的分类
- 2.字符流
- 2.1 案例
1.IO概述
IO(Input/Output):输入和输出,指的是某个设备或环境进行数据的输入或者输出。例如:键盘的输入,再比如显示器就是输出设备,输出图像。
对于java来说输入输出问题,java将它抽象成流对象来解决。
以游戏程序为中心读取文件就是输入,写入文件是输出。
1.1流的分类
IO流在java中从输入输出角度分类:
1.输入流:从数据源读取数据,例如从文件、键盘等读取数据。
2.输出流:将数据写入到目的地,例如写入文件、屏幕等。
IO流在java中从数据的角度来分类:
1.字符流:文本,我们能读的懂的都可以认为是字符流。比如:文章,java文件等等
2.字节流:二进制的数据,这种数据一般用文本打开我们读不懂。比如,图片文件,mp3文件,等等。
2.字符流
文本,我们能读的懂的都可以认为是字符流。比如:文章,java文件等等
字符流
(1)输出流:以 “Writer” 结尾,例如 FileWriter
、BufferedWriter
等。
(2)输入流:以 “Reader” 结尾,例如 FileReader
、BufferedReader
等。
字符流的类的命名的规则:
如果是输出流就以Writer结尾
如果是输入流就以Reader结尾
2.1 案例
使用字符流向一个文件输入helloworld。
分析步骤:
- 创建文件对象,指定文件路径和名称。
- 创建输出流对象,例如
FileWriter
。 - 将输出流指向指定的文件。
- 使用输出流对象的
write()
方法写入数据。 - 释放资源,关闭输出流
public class IOTest {
public static void main(String[] args) {
// 创建文件
File file = new File("test.txt");
Writer writer = null;
try {
// 创建输出流对象
writer = new FileWriter(file);
// 写入数据
writer.write("HelloWorld");
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭输出流
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
如果想在已有文件内容的末尾添加数据,可以使用 FileWriter
的构造方法,并传入第二个参数 true
,表示追加模式。
public class IOTest4 {
public static void main(String[] args) {
Writer writer = null;
try {
//IO流是需要关闭的,如果不这样设计就会不能关闭资源
//writer = new FileWriter("test1.txt", true);
writer = new FileWriter(new File("test1.txt"), true);
writer.write("liangliang");
} catch (IOException e) {
e.printStackTrace();
}finally {
//判断writer不是空防止空指针异常
if(writer != null) {
try {
//在关闭前会做flush的事情
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
换行:
输出换行
把文本写入文件中\n代表换行
问题是不同的环境下换行的方式也不一样
Windows: \r\n
Linux:\n
Mac:\r
public class IOTest5 {
public static void main(String[] args) {
//创建一个文件
File file = new File("test.txt");
Writer writer = null;
try {
//IO流是需要关闭的,如果不这样设计就会不能关闭资源
writer = new FileWriter(file);
for (int i = 0; i < 100; i++) {
writer.write("HelloWorld\r\n");
//每次写入10个helloworld的时候做一次flush
if(i % 10 == 0){
writer.flush();
}
}
} catch (IOException e) {
e.printStackTrace();
}finally {
//判断writer不是空防止空指针异常
if(writer != null) {
try {
//在关闭前会做flush的事情
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
Writer的五种写入的方法
除了 write()
方法之外,Writer
还提供了其他几种写入方法:
write(char[] cbuf)
: 将字符数组写入文件。write(char[] cbuf, int off, int len)
: 将字符数组的一部分写入文件。write(int c)
: 将一个字符写入文件。write(String str)
: 将字符串写入文件。write(String str, int off, int len)
: 将字符串的一部分写入文件。
public class IOTest6 {
public static void main(String[] args) {
//创建一个文件
File file = new File("test.txt");
Writer writer = null;
try {
writer = new FileWriter(file);
//定义一个数组
char[] c = {'a','b','p','b','p'};
/*writer.write(c);
//把数组中的一部分写入文件
writer.write(c, 2, 2);
writer.write(97);
*/
writer.write("helloworld", 2, 2);
} catch (IOException e) {
e.printStackTrace();
}finally {
if(writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}