您的位置:首页 > 编程语言 > Java开发

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

2013-05-08 20:48 190 查看
  java中字符流主要都是继承于Reader和Writer两个抽象类。用于对字符文本的读写操作。



一、转换类流

package com.iotest;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class ConverseStreamDemo {

public static void main(String[] args) {
String s = "F:\\shar\\test\\test3.txt";
try {
//将字节流转为字符流
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(s));
osw.write("中国北京");
System.out.println(osw.getEncoding());
osw.close();
osw = new OutputStreamWriter(new FileOutputStream(s,true),"GB2312");
osw.write("中国北京");
System.out.println(osw.getEncoding());
osw.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
//将字节流转为字符流
InputStreamReader isr = new InputStreamReader(new FileInputStream(s),"GB2312");
int c;
while((c=isr.read()) != -1){
System.out.print((char)c);
}
System.out.println();
isr.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();

}
}

}


二、FileReader和FileWriter

package com.iotest;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/*
* 使用flush()将流数据刷到目标里,这时流还存活着,还可以继续使用该流进行别的操作。
* close()虽然也有flush()的效果但是这时流已经死了,你如果想继续使用流的话就必须在此建立流
*/
public class MutiplicationTable {

public static void main(String[] args) throws IOException {
String s = "F:\\shar\\test\\test5.txt";
FileWriter fw = new FileWriter(s);
FileReader fr = new FileReader(s);
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
String str = i + "*" + j + "=" + i*j + " ";
fw.write(str);
}
fw.write("\r\n");
/*flush是指强行将输出流中的数据写到文件里面去。如果写到这里的话就是一行一行的写入文件
*最好每写完一部分就刷新一次,如果最后刷新的话可能会造成数据的丢失
*/
fw.flush();
}
//如果又不写flush()又不写close(),则不会写入任何内容到文本里。只是写到了缓冲区
//fw.flush(); 写到这里的话就是所有的内容一起写进文件
//fw.close(); close之前会调用flush()
//读字符输入流的数据
int c;
while ((c=fr.read())!=-1) {
System.out.print((char)c);
}
}

}


三、BufferedReader和BufferedWriter

package com.iotest;

import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;

public class PrimeNumber {
BufferedWriter bw = null;
String fileName = "F:\\shar\\test\\test7.txt";
//判断是否是质数
public boolean isPrime(int n){
for(int i=2;i<=n/2;i++){
if(n%i == 0){
return false;
}
}
return true;
}
void printPrime(int m) throws IOException{
//将字节流转缓冲流
bw = new BufferedWriter(new FileWriter(fileName));
int j = 0;
for (int i = 2; i < m; i++) {
if(isPrime(i)){
j++;
String s = String.valueOf(i);
String s1 = s + " ";
bw.write(s1);  //写入文本文件
if(j==10){
j = 0;
bw.newLine();  //写入一个行分隔符
bw.flush();  //强制刷新
}
}
}

bw.close();
}
public static void main(String[] args) throws IOException {
PrimeNumber pn = new PrimeNumber();
pn.printPrime(100);
}

}


四、PrintWriter

package com.iotest;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class PrintWriterDemo {

public static void main(String[] args) throws IOException {
int A = 0;  //千位
int B = 0;  //百位
int C = 0;  //十位
int num = 0;
String fileName = "F:\\shar\\test\\test8.txt";
FileWriter fw = new FileWriter(fileName); //字符输出流
PrintWriter pw = new PrintWriter(fw);     //将字节输出流转为PrintWriter
for (int i = 1000; i < 10000; i++) {
A = i/1000;
B = i/100 % 10;
C = i/10 % 10;
if(i%11==0 && A == B+C){
pw.print(i+" ");
if(++num % 7 == 0){
pw.println();  //写入回车换行
pw.flush();    //强制刷新流
}
}
}
fw.close();

}

}


五、标准IO

package com.iotest;

import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Scanner;

public class PackStardIO {

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter o = new PrintWriter(System.out);  //包装标准输出
String s;
while((s=br.readLine())!=null && s.length()!=0){
o.println(s.toUpperCase());
//o.flush();   //一定要强制刷新让其输出来,否则不会输出
}
}

}


package com.iotest;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;

public class StandardIORedirect {

public static void main(String[] args) throws IOException {
PrintStream console = System.out;
BufferedInputStream in = new BufferedInputStream(new FileInputStream("C:\\Documents and Settings\\01\\桌面\\Test\\src\\com\\iotest\\StandardIORedirect.java"));
PrintStream out = new PrintStream(new BufferedOutputStream(new FileOutputStream("F:\\shar\\test\\test9.txt")));
System.setIn(in);     //对标准输入流重定向
System.setOut(out);
System.setErr(out);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s;
while((s=br.readLine())!=null){   //从BufferedReader中读取一行数据
System.out.println(s);
}
out.close();
System.setOut(console);
}

}


六、随即访问文件类

package com.iotest;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

public class RandomRW {
public static void main(String[] args) throws IOException {
RandomAccessFile raf = new RandomAccessFile("F:\\shar\\test\\test10.dat","rw");
final int DOUBLE_SIZE = 8;
for (int i = 0; i < 10; i++) {
raf.writeDouble(i);
System.out.print(" " + (double)i);
}
System.out.println();
raf.close();
RandomAccessFile raf1 = new RandomAccessFile("F:\\shar\\test\\test10.dat","rw");
raf1.seek(3*DOUBLE_SIZE);  //找到某个位置
raf1.writeDouble(300);     //往该位置插入数据
raf1.seek(5*DOUBLE_SIZE);
raf1.writeDouble(500);
raf1.close();
RandomAccessFile raf2 = new RandomAccessFile("F:\\shar\\test\\test10.dat","r");
for (int i = 0; i < 10; i++) {
System.out.print(" "+raf2.readDouble());
}
raf2.close();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐