java笔记之IO详解——输出字符流
输出字符流:
------| Writer 输出字符流的基类。 抽象类
-----------| FileWriter 向文件数据数据的输出字符流
FileWriter的使用步骤:
1. 找到目标文件。
2. 建立数据输出通道
3. 写出数据。
4. 关闭资源
public class Demo1 { public static void main(String[] args) throws IOException { writeTest1(); } public static void writeTest1() throws IOException{ //找到目标文件 File file = new File("F:\\a.txt"); //建立数据输出通道 FileWriter fileWriter = new FileWriter(file,true); //准备数据,把数据写出 String data = "今天天气非常好!!"; fileWriter.write(data); //字符流具备解码的功能。 //刷新字符流 // fileWriter.flush(); //关闭资源 fileWriter.close(); } }
FileWriter要注意的事项:
1. 使用FileWriter写数据的时候,FileWriter内部是维护了一个1024个字符数组的,写数据的时候会先写入到它内部维护的字符数组中,如果需要
把数据真正写到硬盘上,需要调用flush或者是close方法或者是填满了内部的字符数组。
2. 使用FileWriter的时候,如果目标文件不存在,那么会自动创建目标文件。
3.使用FileWriter的时候, 如果目标文件已经存在了,那么默认情况会先清空文件中的数据,然后再写入数据 , 如果需要在原来的基础上追加数据,
需要使用“new FileWriter(File , boolean)”的构造方法,第二参数为true。
使用字节流读取中文:
import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; //使用字节流读取中文 public class Demo2 { public static void main(String[] args) throws IOException { File file = new File("F:\\a.txt"); FileInputStream fileInputStream = new FileInputStream(file); byte[] buf = new byte[1024]; int length = 0; while((length = fileInputStream.read(buf))!=-1){ System.out.println(new String(buf,0,length)); //借用字符串的解码功能。 } } }
何时使用字符流,何时使用字节流?依据是什么?
使用字符流的应用场景: 如果是读写字符数据的时候则使用字符流。
使用字节流的应用场景: 如果读写的数据都不需要转换成字符的时候,则使用字节流。
//使用字符流拷贝文件 public class Copy { public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new FileReader("F:\\Test.txt")); BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("E:\\Test.exe")); String line=null; while((line = bufferedReader.readLine())!=null){ bufferedWriter.write(line); } bufferedWriter.close(); bufferedReader.close(); } }
练习。登录
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; public class Demo05 { 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)) { Reg(); }else if ("b".equalsIgnoreCase(option)) { login(); }else { System.out.println("您的输入有误,请重新输入。。。。"); } } } public static void Reg() throws IOException{//注册方法 System.out.println("请输入用户名:"); String user=scanner.next(); System.out.println("请输入密码:"); String passwd=scanner.next(); File file=new File("F:/user.txt"); FileWriter fileWriter=new FileWriter(file,true); BufferedWriter bufferedWriter=new BufferedWriter(fileWriter); String info=user+" "+passwd; bufferedWriter.write(info); bufferedWriter.newLine(); bufferedWriter.close(); } public static void login() throws IOException{//登录方法 System.out.println("请输入用户名:"); String user=scanner.next(); System.out.println("请输入密码:"); String passwd=scanner.next(); String info=user+" "+passwd; File file=new File("F:/user.txt"); FileReader fileReader =new FileReader(file); BufferedReader bufferedReader=new BufferedReader(fileReader); String line=null; boolean isLog=false; while ((line=bufferedReader.readLine())!=null) { if (info.equals(line)) { isLog=true; } } if (isLog) { System.out.println("登录成功,欢迎"+user); } else { System.out.println("不存在此用户,请注册"); } } }
作者:风居住的街道
本文版权归作者和博客园共有,欢迎转载, 若文中有什么错误,欢迎指出。以免更多的人被误导。