流(IO流)的分类,写出流FileWriter
package com.qianfeng.test;
import java.io.FileWriter;
import java.io.IOException;
/*
* 流(IO流):input-output-stream。作用:实现两个设备之间的通信。
* 设备:内存,硬盘(磁盘 ),控制台,键盘,文件,网络。
* 网络:在网络上,你的主机之外的环境。
*
* 流的分类:
* 根据流的操作的方式分类:输入流和输出流
* 根据数据的类型分类:字节流和字符流
*
* 字节流:传输的是字节,可以传输任意类型的数据。----视频,音频,文件,图片等。
* 字符流:传输的也是字节,不同点在于传输过程中加入了编码的操作,让我们在传输字符的时候更加便捷。----文件。
*
* 以内存为参考
* 字节流:--对应的父类
* 字节输入流:InputStream
* 字节输出流:OutputStream
*
* 字符流:--对应的父类
* 字符读入流(将数据输入内存):Reader
* 字符写出流(将数据从内存取出):Writer
*
* 先处理字符流:
* 实例:以磁盘的存储为例,将内容写入文件
* 分析:
* 因为传输的是字符----字符流
* 因为是从内存传出----写出流--FileWriter
*
*/
public class Demo2 {
public static void main(String[] args) throws IOException {
//创建写出流对象
/*
* 注意点一:关联文件的特点:如果之前不存在,程序会自动创建一个,如果已经存在,直接使用,但是会将原文件的内容覆盖。
* 注意点二:如果只写名字,不写具体的路径,默认的路径是当前的工程。
* 注意点三:我们可以指定自己的路径,但是一定要保证路径存在,否则报异常FileNotFoundException
*/
FileWriter fileWriter = new FileWriter("temp1.txt");
//调用写出方法
/*
* 注意点四:在执行write方法时,数据被临时写入了流对象的内部数组中,这是一个字节数组,会默认去查编码表。
*/
fileWriter.write("bingbingAndChenchen");
//调用刷新方法--会将内容真正的写入文件。
//fileWriter.flush();
//关闭流--a:将流关闭 b:刷新
//注意点五:流使用完后必须关闭。
fileWriter.close();
//注意点六:当流对象关闭,不能再进行任何操作,否则报异常java.io.IOException: Stream closed
//fileWriter.write("张三");
}
}
文件的续写:FileWriter(String file,boolean value)
package com.qianfeng.test;
import java.io.FileWriter;
import java.io.IOException;
/*
* 文件的续写:FileWriter(String file,boolean value)
* 当value为true的时候,不会将原来的内容删除。
*
* \:是转义字符 \t:制表符 \\:普通的斜杠
* 实现换行:\r\n----window下的换行。 linux:\n
*
*/
public class Demo3 {
public static void main(String[] args) {
FileWriter fileWriter = null;
// 创建对象并关联文件
try {
fileWriter = new FileWriter("temp2.txt", true);
// 写
fileWriter.write("bingbing");
fileWriter.write("\r\n");
fileWriter.write("zhangsan");
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭
if (fileWriter != null) {
try {
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
文件读入,read()一个字符一个字符的读
package com.qianfeng.test;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/*
* 实例:将数据从文件中取出--文件读入流(FileReader)
*/
public class Demo4 {
public static void main(String[] args) throws IOException {
//创建对象并关联文件。关联的文件必须存在。
FileReader fileReader = new FileReader("temp2.txt");
//读
/*
* 两种方式:
* 第一种:read()----一个字符一个字符的读
* 第二种:read(字符数组)--一次可以读取多个字符,将读到的字符临时存储到了这个数组中
*/
//第一种:read()----一个字符一个字符的读
//a:会将当前的字符读出 b:将当前的指针后移一个字符
int data;
// data = fileReader.read();//这里得到的ASCII值
// System.out.println((char)data);
// data = fileReader.read();
// System.out.println((char)data);
// data = fileReader.read();
// System.out.println((char)data);
// data = fileReader.read();
// System.out.println((char)data);
// data = fileReader.read();
// System.out.println((char)data);
// data = fileReader.read();
// System.out.println(data);//这里返回的是-1,代表读完了。
while((data = fileReader.read()) != -1){
System.out.println((char)data);
}
//关闭流
fileReader.close();
}
}
文件读入,read(字符数组)一次可以读取多个字符
package com.qianfeng.test;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Demo5 {
public static void main(String[] args) throws IOException {
//创建对象并关联文件。关联的文件必须存在。
FileReader fileReader = new FileReader("temp2.txt");
//第二种:read(字符数组)--一次可以读取多个字符,将读到的字符临时存储到了这个数组中.
/*
* 数组是临时存放数据的地方,我们会将读到的字符放到数组中,数组的大小决定了我们一次可以读到的字符个数。
* 但是从内存的角度考虑,临时数组并不是越大越好,一般数组的大小在1kb左右。
*
* 返回值:代表的是本次读到的真实字符个数,如果返回值是-1代表读完了。
*/
char[] arr = new char[2];
int num;
// num = fileReader.read(arr);
// System.out.println(new String(arr,0,num)+" "+num);
// num = fileReader.read(arr);
// System.out.println(new String(arr,0,num)+" "+num);
// num = fileReader.read(arr);
// System.out.println(new String(arr,0,num)+" "+num);//代表将字符数组从下标0开始的num个字符转成字符串。
// num = fileReader.read(arr);
// System.out.println(new String(arr)+" "+num);//-1,说明读完了
while((num=fileReader.read(arr))!=-1){
System.out.println(new String(arr,0,num)+" "+num);
}
//关闭流
fileReader.close();
}
}
相对路径和绝对路径,内容拷贝
package com.qianfeng.test;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/*
* 路径的讲解:
* 相对路径和绝对路径
* 实例:D:\\workspace\\32\\BigData1715N19\\src\\com\\qianfeng\\test\\Demo1.java 绝对路径
* com\\qianfeng\\test\\Demo1.java 相对路径
* 相对路径:从路径中间的某个部位开始一直到当前的文件名字。
* 绝对路径:一个文件的完整路径,即从根目录开始的路径。
*
* 路径中的/ \是转义字符 \\==/
*
*/
public class Demo6 {
public static void main(String[] args) throws IOException, InterruptedException {
//实例:实现文件的赋值
//要求:将Demo1的内容拷贝到temp3.txt
//1.创建读入流和写出流并关联对应的文件。
FileReader fileReader = new FileReader("src\\com\\qianfeng\\test\\Demo2.java");
FileWriter fileWriter = new FileWriter("temp3.txt");
//2.读写
//一次读多个字符
// char[] arr = new char[10];
// int num;
// while((num=fileReader.read(arr))!=-1){
// //将字符数组的部分内容写入文件
// fileWriter.write(arr,0,num);
// }
//一次读一个字符
int num;
while((num=fileReader.read())!=-1){
fileWriter.write(num);//write()自带了编码
}
//3.关闭资源
fileReader.close();
fileWriter.close();
}
}