Java基础笔记总结(14)-IO流(2)字符流 FileReader FileWriter BufferedReader BufferedWriter 行号计算LineNumberReader...

字符流是什么

字符流是可以读写字符的IO流

字符流读取字符,先要读取字节数据,然后转换为字符,需要把字符转换为字节再写出

FileReader类的read()方法可以按照字符大小读取数据

FileReader  fr = new FileReader("aaa.txt");//注意 这个文件必须存在

int ch;

while((ch = fr.read())!=-1){//通过项目默认的码表一次读取一个字符

  System.out.println((char)ch);

}

fr.close();

---------------------------------------------------------------------------------

FileWriter

FileWriter fw = new FileWriter("yyy.txt");

fw.write(Str);

fw.close();

---------------------------------------------------------------------------------

字符流的拷贝

FileReader fr = new FileReader("xxx.txt");

FileWriter fw = new FileWriter("zzz.txt");

int c;

while((c = fr.read())!=-1){

fw.write(c);

}

fr.close();

fw.close();

字符流可以拷贝文本文件,但是不推荐使用,因为会先将字节变为字符读取,而写入会将字符变成字节在写入。

如果按照字符读取,不会出现半个中文的状况,

但是拷贝图片不建议使用,因为拷贝过程中,字节找不到对应的字符,就会用?代替,在写入过程中,再讲字符转换成字节写出去,这样文件就乱了。

----------------------------------------------------------------------------------

自定义字符数组的拷贝

FileReader fr = new FileReader("xxx.txt");

FileWriter fw = new FileWriter("zzz.txt");

char[] arr = new char[1024];

int len;

while((len = fr.read(arr))!=-1){

fr.writer();

}

--------------------------------------------------------------------------------------

IO缓冲流

BufferedReader br = new BufferedReader(new FileReader("xxx.txt"));

BufferedWriter bw = new BufferedWriter(new FileWriter("xxx.txt"));

int c;

while((c = br.read())!=-1){


    br.write(c);

}

br.close();

bw.close();

BufferedReader readLine();

BufferedWriter newLine();读取但不会 是换行符(跨平台使用)

-------------------------------------------------------------------------------------

文本反转(行数反转) 流对象尽量晚开早关  Collections.reverse(list);也可以实现集合反转

BufferedReader

String line;

while((line = br.readLine())!= null){

  list.add(line);

}

for(int i = list.size()-1;i>=0;i--){

bw.write(list.get(i));

bw.newLine();

}

----------------------------------------------------------------------------

行号的设置和获取

setLineNumber

getLineNumber

LineNumberReader lnr = new LineNumberReader(new FileReader("zzz.txt"));

String line;

lnr.setLineNumer(100);

while((line = lnr.readLine())!=null){

System.out.println(lnr.getLineNumber()+line);

}

lnr.close();

--------------------------------------------------------------------------

设计模式(装饰设计模式)原来功能不强大,设计将其来更强大--------------------降低了耦合性

public class Demo_Wrap {

public static void main(String[] args) {

HeiMaStudent heiMaStudent = new HeiMaStudent(new Student());

heiMaStudent.code();

}

}

interface Coder{

void code();

}

class Student implements Coder{

s

@Override

public void code() {

System.out.println("javase");

System.out.println("javaweb");

}

}

class HeiMaStudent implements Coder{

// 1、获取引用

private Student s;

// 2、在构造方法中传入被装饰类对象

public HeiMaStudent(Student s) {

this.s = s;

}

// 对原有功能进行升级

@Override

public void code() {

s.code();

System.out.println("ssh");

System.out.println("数据库");

}

}

----------------------------------------------------------------------------------

使用指定码表读写字符

FileReader fr = new FileReader("");

FileWriter fw = new FileWriter("");

InputStreamReader isr = new InputStreamReader(new FileInputStream("utf-8.txt"),"UTF-8");

OutputStreamWriter osw =  new OutputStreamWriter(new FileOutputStream("xxx.txt"),"UTF-8");

int c ;

while((c=isr.read())!=-1){

osw.write(c);

}

isr.close();

osr.close();

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("")),"UTF-8");

int c ;

while((c=br.read())!=-1){

bw.write(c);

}

----------------------------------------------------------------------------------

获取文本上字符做的次数

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.util.TreeMap;

public class Demo_CopyNum {

public static void main(String[] args) throws IOException {

BufferedReader br = new BufferedReader(new FileReader("xxx.txt"));

TreeMap<Character, Integer> tm = new TreeMap<>();

int ch;

while ((ch = br.read()) != -1) {

char c = (char) ch;

tm.put(c, !tm.containsKey(c) ? 1 : tm.get(c) + 1);

}

br.close();

BufferedWriter bw = new BufferedWriter(new FileWriter("yyy.txt"));

for (Character key : tm.keySet()) {

bw.write(key+"="+tm.get(key));

bw.newLine();

}

bw.close();

}

}

-----------------------------------------------------------------------------------

适用版本软件

BufferedReader br = new BufferedReader(new FileReader("xxx.txt"));

String line = br.readLine();为了保证数据的原样性

int times = Integer.parseInt(line);

if(times> 0)}{

System.out.println(timer--);

FileWriter fw = new FileWriter("config.txt");

fw.write(times+"");

fw.close();//必须要关 否者只在缓冲区,并没有写入到文件中

}else{

}

br.close();

--------------------------------------------------------------------------------------

File递归

注意 构造方法是不可以递归调用的

递归调用次数过多会出现栈内存的溢出

递归调用可以有返回值,也可以没有返回值

-------------------------------------------------------------------------------------

从键盘接受一个文件夹路径,遍历所有点java文件

while(true){

String line = sc.nextLine();

File dir = new File(line);

if(!dir.exists()){

System.out.println()

}else if(dir.isFile()){

}else{

return dir;

}

main :

File dir = getDir();

获取文件夹下的所有.java文件

public static void printFile(File dir){

File[] subFiles = dir.listFiles();

for(File fire : subFiles){

if(fire.iseFile()&&fire.getName().endsWith("java"))

}else if(dir.isDirectory){

printFile(subFile);

}

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • ①IO流(字符流FileReader) 1.字符流是什么字符流是可以直接读写字符的IO流字符流读取字符, 就要先读...
    Y小圆脸阅读 510评论 0 2
  • 概述 计算机并不区分二进制文件与文本文件。所有的文件都是以二进制形式来存储的,因此,从本质上说,所有的文件都是二进...
    奋斗的老王阅读 1,326评论 0 51
  • 21.01_IO流(字符流FileReader) 1.字符流是什么字符流是可以直接读写字符的IO流字符流读取字符,...
    dreamkong阅读 665评论 0 2
  • 一,IO流的分类 A,按照操作的对象不同可分为字节流与字符流 B,按照流的方向不同可分为输入(指从外部存储设备拿文...
    哦00阅读 193评论 0 0