day 21FileWriter 和FileReader

21.01_IO流(字符流FileReader)
* 1.字符流是什么
* 字符流是可以直接读写字符的IO流
* 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要写出字符, 需要把字符转为字节再写出.
* 2.FileReader
FileReader类的read()方法可以按照字符大小读取

FileReader fr = new FileReader("aaa.txt"); //创建输入流对象,关联aaa.txt
int ch;
while((ch = fr.read()) != -1) { //将读到的字符赋值给ch
System.out.println((char)ch); //将读到的字符强转后打印(要强制转换)
}

fr.close();

21.02_IO流(字符流FileWriter)
* FileWriter类的write()方法可以自动把字符转为字节写出

FileWriter fw = new FileWriter("aaa.txt");
fw.write("aaa");
fw.close();
直接写出,不用像FileOutputStream一样还有.getBytes;

###21.03_IO流(字符流的拷贝)
FileReader fr = new FileReader("a.txt");
FileWriter fw = new FileWriter("b.txt");

int ch;
while((ch = fr.read()) != -1) {
fw.write(ch);
}

fr.close();
fw.close();

字符流和字节流的区别
* 字符流也可以拷贝文本文件, 但不推荐使用. 因为读取时会把字节转为字符, 写出时还要把字符转回字节.
* 程序需要读取一段文本, 或者需要写出一段文本的时候可以使用字符流
* 读取的时候是按照字符的大小读取的,不会出现半个中文
* 写出的时候可以直接将字符串写出,不用转换为字节数组

21.05_IO流(字符流是否可以拷贝非纯文本的文件)
* 不可以拷贝非纯文本的文件

21.06_IO流(自定义字符数组的拷贝)
*

FileReader fr = new FileReader("aaa.txt"); //创建字符输入流,关联aaa.txt
FileWriter fw = new FileWriter("bbb.txt"); //创建字符输出流,关联bbb.txt

int len;
char[] arr = new char[1024*8]; //创建字符数组
while((len = fr.read(arr)) != -1) { //将数据读到字符数组中
fw.write(arr, 0, len); //从字符数组将数据写到文件上
}

fr.close(); //关流释放资源
fw.close();

21.07_IO流(带缓冲的字符流)
* BufferedReader的read()方法读取字符时会一次读取若干字符到缓冲区, 然后逐个返回给程序, 降低读取文件的次数, 提高效率
* BufferedWriter的write()方法写出字符时会先写到缓冲区, 缓冲区写满时才会写到文件, 降低写文件的次数, 提高效率
*
BufferedReader br = new BufferedReader(new FileReader("aaa.txt")); //创建字符输入流对象,关联aaa.txt
BufferedWriter bw = new BufferedWriter(new FileWriter("bbb.txt")); //创建字符输出流对象,关联bbb.txt

int ch;
while((ch = br.read()) != -1) { //read一次,会先将缓冲区读满,从缓冲去中一个一个的返给临时变量ch
bw.write(ch); //write一次,是将数据装到字符数组,装满后再一起写出去
}

br.close(); //关流
bw.close();

21.08_IO流(readLine()和newLine()方法)
* BufferedReader的readLine()方法可以读取一行字符(不包含换行符号)
* BufferedWriter的newLine()可以输出一个跨平台的换行符号"\r\n"
*
BufferedReader br = new BufferedReader(new FileReader("aaa.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("bbb.txt"));
String line;
while((line = br.readLine()) != null) {
bw.write(line);
//bw.write("\r\n");//表示换行啊 //只支持windows系统
bw.newLine(); //直接换行 //跨平台的
}

br.close();
bw.close();

以下是程序重点,将文本反转
* 将一个文本文档上的文本反转,第一行和倒数第一行交换,第二行和倒数第二行交换
* */
public class Test1 {

public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader b = new BufferedReader(new FileReader("xxx.txt"));
ArrayList<String> list = new ArrayList<>();
String line;
while ((line = b.readLine()) != null) {
list.add(line);
}
b.close();
//
BufferedWriter bw = new BufferedWriter(new FileWriter("zzz.txt"));
for (int i = list.size() - 1; i > 0; i--) {
bw.write(list.get(i));
bw.newLine();
}
bw.close();
}
}

获取文本字符出现的次数
//获取一个文本上每个字符出现的次数,将结果写在times.txt上
public class Test2 {
public static void main(String args[]) throws IOException {
BufferedReader bu = new BufferedReader(new FileReader("xxx.txt"));
HashMap<Character, Integer> hm = new HashMap<>();
int c;
while ((c = bu.read()) != -1) {
char ch = (char) c;
hm.put(ch, !hm.containsKey(ch) ? 1 : hm.get(ch) + 1);
}
bu.close();
BufferedWriter bw = new BufferedWriter(new FileWriter("lixiaowei.txt"));
for (Character key : hm.keySet()) {
bw.write(key + " = " + hm.get(key));
bw.newLine();
}
bw.close();//

}

}
//另外一种清晰的方法,更好的突出换行 回车空格等

//获取一个文本上每个字符出现的次数,将结果写在times.txt上
public class Test2 {
public static void main(String args[]) throws IOException {
BufferedReader bu = new BufferedReader(new FileReader("xxx.txt"));
HashMap<Character, Integer> hm = new HashMap<>();
int c;
while ((c = bu.read()) != -1) {
char ch = (char) c;
hm.put(ch, !hm.containsKey(ch) ? 1 : hm.get(ch) + 1);
}
bu.close();
BufferedWriter bw = new BufferedWriter(new FileWriter("liyan.txt"));
for (Character key : hm.keySet()) {
bw.write(key + " = " + hm.get(key));
bw.newLine();
}
bw.close();

}

最后就是文件递归等
//从键盘输入接收一个文件夹路径,打印出该文件夹下所有的.java文件名
public class digui {
public static void main(String[] args) {
// TODO Auto-generated method stub
File f = getDir();
printJavaFile(f);
}

public static File getDir() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个文件夹路径");
while (true) {
String path = sc.nextLine();
File fi = new File(path);
if (!fi.exists()) {
System.out.println("您录入的文件不存在");
} else if (fi.isFile()) {
System.out.println("您输入的是文件");
} else {
return fi;
}
}
}

public static void printJavaFile(File ff) {
File[] s = ff.listFiles();
for (File ss : s) {
if (ss.isFile() && ss.getName().endsWith("java")) {
System.out.println(ss);
} else if (ss.isDirectory()) {
printJavaFile(ss);
}
}

}
}

}

时间: 2024-08-07 16:44:41

day 21FileWriter 和FileReader的相关文章

使用FileReader接口读取文件内容

如果想要读取或浏览文件,则需要通过FileReader接口,该接口不仅可以读取图片文件,还可以读取文本或二进制文件,同时,根据该接口提供的事件与方法,可以动态侦察文件读取时的详细状态,接下来,我们详细介绍FileReader接口的使用方法. FileReader 接口 FileReader 接口提供了一个异步的API,通过这个API可以从浏览器主线程中异步访问文件系统中的数据,基于此原因,FileReader 接口可以读取文件中的数据,并将读取的数据放入内存中. 当访问不同文件时,必须重新调用F

FileInputStream、FileReader、FileInputStream、FileWriter使用小结

本文是基于Linux环境运行,读者阅读前需要具备一定Linux知识 InputStream包含如下三个方法: int read():从输入流中读取单个字节,返回所读取的字节数据(字节数据可直接转化为int类型) int read(byte[] b):从输入流中最多读取b.length个字节的数据,并将其存储在字节数组b中,返回实际读取的字节数 int read(byte[] b, int off, int len):从输入流中最多读取len个字节的数据,并将其存储在数组b中:放入数组b中时,并不

理解IO流:InputStream和OutputStream,FileInputStream和FileOutputStream,Reader和Writer,FileReader和FileWriter,BufferedInputStream 和 BufferedOutputStream, BufferedReader 和 BufferedWriter,转换流

/* * 1.理解 "流" ? * 动态性.连续性.方向性. * * 2.在java语言中,将数据的输入/输出称之为 IO流. IO流的分类: * 1) 从方向分: 输入流 , 输出流. (参照计算机的内存) * 将数据送到内存中去称之为输入流.反之,称之为输出流. * * 2) 从处理单位来分: 字节流(8位二进制数据), 字符流(16位二进制数据). * * 3) 从是否有数据源来分: 节点流(有数据源), 处理流(必须套在节点流上). * * 3.在Java语言中,所有流类均来自

HTML5 fileReader 随堂笔记

检查浏览器是否支持 1 if(window.FileReader) { 2 } else { 3 alert("您的浏览器不支持上传预览"); 4 } 简单方法 1 <!DOCTYPE html> 2 <html> 3 4 <head> 5 <meta charset="UTF-8"> 6 <title>fileReader上传文件</title> 7 </head> 8 9 <

fileReader()

File Interface A File object in JavaScript references an actual file in the local filesystem. This File object inherits all properties and methods from the Blob class. Although the File objects and Blob objects are different, they expose same methods

InputStreamReader 和FileReader的区别

InputStreamReader 和 BufferedReader .其中最重要的类是 InputStreamReader ,它是字节转换为字符的桥梁. 你可以在构造器重指定编码的方式,如果不指定的话将采用底层操作系统的默认编码方式,例如 GBK 等. FileReader 与 InputStreamReader 涉及编码转换 ( 指定编码方式或者采用 os 默认编码 ) ,可 能在不同的平台上出现乱码现象!而 FileInputStream 以二进制方式处理,不会出现乱码现象 . FileI

html之file标签 --- 图片上传前预览 -- FileReader

记得以前做网站时,曾经需要实现一个图片上传到服务器前,先预览的功能.当时用html的<input type="file"/>标签一直实现不了,最后舍弃了这个标签,使用了其他方式来实现了这个功能. 今天无意发现了一个知识点,用html的file标签就能实现图片上传前预览,感觉很棒,记录一下!就是通过file标签和js的FileReader接口,把选择的图片文件调用readAsDataURL方法,把图片数据转成base64字符串形式显示在页面上. 1.闲话少说,测试一下,图片上

Java基础-简单的字符流-FileReader,FileWriter

简介:如题 package com.cc.test; import java.io.FileReader; import java.io.FileWriter; public class TestChar { public static void main(String[] args) { FileReader fReader = null; FileWriter fWriter = null; try{ fReader = new FileReader("E:/Android/AndroidS

JAVA学习--文件流FileReader和FileWriter应用

* 使用FileReader.FileWriter 可以实现文本文件的复制. * 对于非文本文件(视频文件.音频文件.图片),只能使用字节流! 1 @Test 2 public void testFileReader(){ 3 FileReader fr = null; 4 try { 5 File file = new File("dbcp.txt"); 6 fr = new FileReader(file); 7 char[] c = new char[24]; 8 int len