java面试复习(1)
java面试复习(2)之File类
Java面试复习(3)之IO流
java面试复习(4)之字符流
字符流
复习:字节流读取的是文件中的二进制数据,独到的数据并不会帮你转换成你看得懂的字符。
字符流会把读取到的二进制的数据进行对应的编码与解码工作。字符流=字节流+编码(解码)
输入字符流:
-----------|Reader输入字符流的基类 抽象类
-------------|FileReader 读取文件的输入字符流
FileReader的用法:
1.找到目标文件
2.建立数据的输入通道
3.读取数据
4.关闭资源
练习:
package net.nyist;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Demo1 {
public static void main(String[] args) throws IOException {
readTest1();
readTest2();
}
public static void readTest2() throws IOException{
//1.找到目标文件
File file = new File("E:\\a.txt");
//2.建立疏通管道
FileReader fileReader = new FileReader(file);
//读取文件信息
int length = 0;
char [] buf = new char[1024];
while((length = fileReader.read(buf))!=-1){
System.out.println(new String(buf,0,length));
}
fileReader.close();
}
public static void readTest1() throws IOException{
//1.找到目标文件
File file = new File("E:\\a.txt");
//2.建立疏通管道
FileReader fileReader = new FileReader(file);
//读取文件数据
int content = 0;
while((content = fileReader.read())!=-1){ //每次只会读取一个字符,效率低。
System.out.print((char)content);
}
fileReader.close();
}
}
输出字节流:
-----------|Writer 输出字符流的基类。抽象类
----------------|FileWriter 向文件数据的输出字符流
FileWriter的使用步骤:
1.找到目标文件
2.建立数据输出通道
3.写出数据
4.关闭资源
FileWriter要注意的事项:
1.使用FileWriter写数据的时候,FileWriter内部是维护了一个1024个字符数组的,写数据的时候会先写入到它内部维护的字符数组中,如果需要把数据真正的写到硬盘上,需要调用flush或者是close方法或者是填满了内部的字符数组。
2.使用FileWriter的时候,如果目标文件不存在,那么会自动创建目标文件。
3.使用FileWriter的时候,如果目标文件已经存在了,那么默认情况会先清除文件中的数据,然后再写入数据,如果需要在原来的基础上追加数据,需要使用:"new FileWriter(File,boolean)"的构造方法,第二参数为true。
public class Demo2 {
public static void main(String[] args) throws IOException {
writeTest();
}
public static void writeTest() throws IOException{
//1.确定目标文件
File file = new File("E:\\a.txt");
//2.疏通文件通道
FileWriter fileWriter = new FileWriter(file,true);
//3.写入文件
String buf = "北京欢迎你";
fileWriter.write(buf);
//关闭资源
fileWriter.close();
}
}
练习:使用字符流拷贝一个文本文件(java文件)
接着使用字符流拷贝一个图片(观察图片的大小变化)
public class Demo3 {
public static void main(String[] args) throws IOException {
copyTxt();
copyImage();
}
public static void copyTxt() throws IOException{
BufferedReader bufferedReader = new BufferedReader(new FileReader("E:\\a.txt"));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("D:\\a.txt"));
String length = null;
while((length = bufferedReader.readLine())!=null){
bufferedWriter.write(length);
}
bufferedWriter.close();
bufferedReader.close();
}
public static void copyImage() throws IOException{
BufferedReader bufferedReader = new BufferedReader(new FileReader("E:\\假装生活在1994.png"));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("D:\\假装生活在1994.png"));
String length = null;
while((length = bufferedReader.readLine())!=null){
bufferedWriter.write(length);
}
bufferedWriter.close();
bufferedReader.close();
}
}
练习:缓冲输入字符流用户登陆注册。。
public class Demo4 {
static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) throws IOException {
while(true){
System.out.println("请选择功能:A(注册) B(登陆)");
String option = scanner.next();
if("a".equalsIgnoreCase(option)){
//zhuce
reg();
}else if("b".equalsIgnoreCase(option)){
//登陆
Login();
}else{
System.out.println("你的输入有错,请重新输入...");
}
}
}
public static void Login() throws IOException{
System.out.println("请输入用户名:");
String user = scanner.next();
System.out.println("请输入密码:");
String pw = scanner.next();
String info = user+" "+pw;
//读取文件信息,查看是否有该用户的信息存在,如果存在则登陆成功
//建立数据的输入通道
//建立缓冲输入字符流
BufferedReader bufferedReader = new BufferedReader(new FileReader("E:\\user.txt"));
String line = null;
boolean isLogin = false;//用于记录是否登陆成功的标识,默认是登陆失败的。
//不断的读取文件的内容
while((line = bufferedReader.readLine())!=null){
if(info.equals(line)){
isLogin = true;
break;
}
}
if(isLogin){
System.out.println("欢迎"+user+"登陆成功");
}else{
System.out.println("不存在该用户信息 ,请注册!");
}
}
public static void reg() throws IOException{
System.out.println("请输入用户名:");
String userName = scanner.next();
System.out.println("请输入密码:");
String password = scanner.next();
String info = userName+" "+password;
//把用户注册的信息写到文件上
File file = new File("E:\\user.txt");
FileWriter fileWriter = new FileWriter(file,true);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write(info);
bufferedWriter.newLine();//换行
bufferedWriter.close();
}
}