java笔记八:IO流之字符流与字符缓冲流

简介:

  java中字符流主要都是继承于Reader和Writer两个抽象类。用于对字符文本的读写操作。

 

一、转换类流


 1 package com.iotest;
 2
 3 import java.io.FileInputStream;
 4 import java.io.FileNotFoundException;
 5 import java.io.FileOutputStream;
 6 import java.io.IOException;
 7 import java.io.InputStreamReader;
 8 import java.io.OutputStreamWriter;
 9
10 public class ConverseStreamDemo {
11
12     public static void main(String[] args) {
13         String s = “F:\shar\test\test3.txt”;
14         try {
15             //将字节流转为字符流
16             OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(s));
17             osw.write(“中国北京”);
18             System.out.println(osw.getEncoding());
19             osw.close();
20             osw = new OutputStreamWriter(new FileOutputStream(s,true),”GB2312”);
21             osw.write(“中国北京”);
22             System.out.println(osw.getEncoding());
23             osw.close();
24         } catch (FileNotFoundException e) {
25             // TODO Auto-generated catch block
26             e.printStackTrace();
27         } catch (IOException e) {
28             // TODO Auto-generated catch block
29             e.printStackTrace();
30         }
31         try {
32             //将字节流转为字符流
33             InputStreamReader isr = new InputStreamReader(new FileInputStream(s),”GB2312”);
34             int c;
35             while((c=isr.read()) != -1){
36                 System.out.print((char)c);
37             }
38             System.out.println();
39             isr.close();
40         } catch (FileNotFoundException e) {
41             // TODO Auto-generated catch block
42             e.printStackTrace();
43         } catch (IOException e) {
44             // TODO Auto-generated catch block
45             e.printStackTrace();

46         }
47     }
48
49 }

 

二、FileReader和FileWriter


 1 package com.iotest;
 2
 3 import java.io.FileNotFoundException;
 4 import java.io.FileReader;
 5 import java.io.FileWriter;
 6 import java.io.IOException;
 7 /
 8   使用flush()将流数据刷到目标里,这时流还存活着,还可以继续使用该流进行别的操作。
 9   close()虽然也有flush()的效果但是这时流已经死了,你如果想继续使用流的话就必须在此建立流
10  /
11 public class MutiplicationTable {
12
13     public static void main(String[] args) throws IOException {
14         String s = “F:\shar\test\test5.txt”;
15         FileWriter fw = new FileWriter(s);
16         FileReader fr = new FileReader(s);
17         for (int i = 1; i <= 9; i++) {
18             for (int j = 1; j <= i; j++) {
19                 String str = i + ““ + j + “=” + ij + “ “;
20                 fw.write(str);
21             }
22             fw.write(“\r\n”);
23             /flush是指强行将输出流中的数据写到文件里面去。如果写到这里的话就是一行一行的写入文件
24              最好每写完一部分就刷新一次,如果最后刷新的话可能会造成数据的丢失
25              */
26             fw.flush();
27         }
28         //如果又不写flush()又不写close(),则不会写入任何内容到文本里。只是写到了缓冲区
29         //fw.flush(); 写到这里的话就是所有的内容一起写进文件
30         //fw.close(); close之前会调用flush()
31         //读字符输入流的数据
32         int c;
33         while ((c=fr.read())!=-1) {
34             System.out.print((char)c);
35         }
36     }
37
38 }

 

三、BufferedReader和BufferedWriter

 1 package com.iotest;
 2
 3 import java.io.BufferedOutputStream;
 4 import java.io.BufferedWriter;
 5 import java.io.FileOutputStream;
 6 import java.io.FileWriter;
 7 import java.io.IOException;
 8
 9 public class PrimeNumber {
10     BufferedWriter bw = null;
11     String fileName = “F:\shar\test\test7.txt”;
12     //判断是否是质数
13     public boolean isPrime(int n){
14         for(int i=2;i<=n/2;i++){
15             if(n%i == 0){
16                 return false;
17             }
18         }
19         return true;
20     }
21     void printPrime(int m) throws IOException{
22         //将字节流转缓冲流
23         bw = new BufferedWriter(new FileWriter(fileName));
24         int j = 0;
25         for (int i = 2; i < m; i++) {
26             if(isPrime(i)){
27                 j++;
28                 String s = String.valueOf(i);
29                 String s1 = s + “ “;
30                 bw.write(s1);  //写入文本文件
31                 if(j==10){
32                     j = 0;
33                     bw.newLine();  //写入一个行分隔符
34                     bw.flush();  //强制刷新
35                 }
36             }
37         }
38
39         bw.close();
40     }
41     public static void main(String[] args) throws IOException {
42         PrimeNumber pn = new PrimeNumber();
43         pn.printPrime(100);
44     }
45
46 }

四、PrintWriter

 1 package com.iotest;
 2
 3 import java.io.FileWriter;
 4 import java.io.IOException;
 5 import java.io.PrintWriter;
 6
 7 public class PrintWriterDemo {
 8
 9     public static void main(String[] args) throws IOException {
10         int A = 0;  //千位
11         int B = 0;  //百位
12         int C = 0;  //十位
13         int num = 0;
14         String fileName = “F:\shar\test\test8.txt”;
15         FileWriter fw = new FileWriter(fileName); //字符输出流
16         PrintWriter pw = new PrintWriter(fw);     //将字节输出流转为PrintWriter
17         for (int i = 1000; i < 10000; i++) {
18             A = i/1000;
19             B = i/100 % 10;
20             C = i/10 % 10;
21             if(i%11==0 && A == B+C){
22                 pw.print(i+” “);
23                 if(++num % 7 == 0){
24                     pw.println();  //写入回车换行
25                     pw.flush();    //强制刷新流
26                 }
27             }
28         }
29         fw.close();
30
31     }
32
33 }

五、标准IO

 1 package com.iotest;
 2
 3 import java.io.BufferedReader;
 4 import java.io.FileWriter;
 5 import java.io.IOException;
 6 import java.io.InputStreamReader;
 7 import java.io.PrintWriter;
 8 import java.util.Scanner;
 9
10 public class PackStardIO {
11
12     public static void main(String[] args) throws IOException {
13         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
14         PrintWriter o = new PrintWriter(System.out);  //包装标准输出
15         String s;
16         while((s=br.readLine())!=null && s.length()!=0){
17             o.println(s.toUpperCase());
18             //o.flush();   //一定要强制刷新让其输出来,否则不会输出
19         }
20     }
21
22 }

 1 package com.iotest;
 2
 3 import java.io.BufferedInputStream;
 4 import java.io.BufferedOutputStream;
 5 import java.io.BufferedReader;
 6 import java.io.FileInputStream;
 7 import java.io.FileNotFoundException;
 8 import java.io.FileOutputStream;
 9 import java.io.IOException;
10 import java.io.InputStreamReader;
11 import java.io.PrintStream;
12
13 public class StandardIORedirect {
14
15     public static void main(String[] args) throws IOException {
16         PrintStream console = System.out;
17         BufferedInputStream in = new BufferedInputStream(new FileInputStream(“C:\Documents and Settings\01\桌面\Test\src\com\iotest\StandardIORedirect.java”));
18         PrintStream out = new PrintStream(new BufferedOutputStream(new FileOutputStream(“F:\shar\test\test9.txt”)));
19         System.setIn(in);     //对标准输入流重定向
20         System.setOut(out);
21         System.setErr(out);
22         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
23         String s;
24         while((s=br.readLine())!=null){   //从BufferedReader中读取一行数据
25             System.out.println(s);
26         }
27         out.close();
28         System.setOut(console);
29     }
30
31 }

六、随即访问文件类

 1 package com.iotest;
 2
 3 import java.io.FileNotFoundException;
 4 import java.io.IOException;
 5 import java.io.RandomAccessFile;
 6
 7 public class RandomRW {
 8     public static void main(String[] args) throws IOException {
 9         RandomAccessFile raf = new RandomAccessFile(“F:\shar\test\test10.dat”,”rw”);
10         final int DOUBLE_SIZE = 8;
11         for (int i = 0; i < 10; i++) {
12             raf.writeDouble(i);
13             System.out.print(“ “ + (double)i);
14         }
15         System.out.println();
16         raf.close();
17         RandomAccessFile raf1 = new RandomAccessFile(“F:\shar\test\test10.dat”,”rw”);
18         raf1.seek(3DOUBLE_SIZE);  //找到某个位置
19         raf1.writeDouble(300);     //往该位置插入数据
20         raf1.seek(5DOUBLE_SIZE);
21         raf1.writeDouble(500);
22         raf1.close();
23         RandomAccessFile raf2 = new RandomAccessFile(“F:\shar\test\test10.dat”,”r”);
24         for (int i = 0; i < 10; i++) {
25             System.out.print(“ “+raf2.readDouble());
26         }
27         raf2.close();
28     }
29
30 }

相关文章
|
16天前
|
Java
Java基础—笔记—static篇
`static`关键字用于声明静态变量和方法,在类加载时初始化,只有一份共享内存。静态变量可通过类名或对象访问,但推荐使用类名。静态方法无`this`,不能访问实例成员,常用于工具类。静态代码块在类加载时执行一次,用于初始化静态成员。
10 0
|
16天前
|
Java API 索引
Java基础—笔记—String篇
本文介绍了Java中的`String`类、包的管理和API文档的使用。包用于分类管理Java程序,同包下类无需导包,不同包需导入。使用API时,可按类名搜索、查看包、介绍、构造器和方法。方法命名能暗示其功能,注意参数和返回值。`String`创建有两种方式:双引号创建(常量池,共享)和构造器`new`(每次新建对象)。此外,列举了`String`的常用方法,如`length()`、`charAt()`、`equals()`、`substring()`等。
15 0
|
1月前
|
存储 Java 数据处理
|
1月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--希尔排序
数据结构与算法(Java篇)笔记--希尔排序
|
1天前
|
存储 缓存 Java
|
16天前
|
Java API
Java基础—笔记—内部类、枚举、泛型篇
本文介绍了Java编程中的内部类、枚举和泛型概念。匿名内部类用于简化类的创建,常作为方法参数,其原理是生成一个隐含的子类。枚举用于表示有限的固定数量的值,常用于系统配置或switch语句中。泛型则用来在编译时增强类型安全性,接收特定数据类型,包括泛型类、泛型接口和泛型方法。
9 0
|
18天前
|
存储 Java 数据库连接
java使用mp持久化框架,写入5000个字符,但是VARCHAR(255) 会报错
使用Java的MyBatis Plus框架时,如果尝试将超过VARCHAR(255)限制的字符串(如5000个字符)存入数据库,会抛出异常。解决方法是将列类型改为TEXT。可通过在实体类属性上添加`@TableField(typeHandler = JdbcType.CLOB)`注解,如`private String content;`,将属性映射到CLOB类型列,以存储更长字符串。
9 0
|
21天前
|
存储 Java
探索 Java IO 流的多种实现方式
【4月更文挑战第4天】Java IO 流是处理输入输出的关键组件,包括文件流(FileInputStream/FileOutputStream)、字符流(FileReader/FileWriter)、缓冲区流(BufferedInputStream/BufferedOutputStream)、转换流(InputStreamReader/OutputStreamWriter)、数据流(DataInputStream/DataOutputStream)、对象流(ObjectInputStream/ObjectOutputStream)、随机访问文件流(RandomAccessFile)和管道流。
|
25天前
|
SQL Java 数据库连接
Cause: java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符
Cause: java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符
12 0
|
1月前
|
Java 关系型数据库 MySQL
Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
【2月更文挑战第33天】Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
52 2