JAVA基础28——IO流(字符流)

public class IoDemo {

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

		 */
	public static void main(String[] args) throws IOException {
		FileReader fr = new FileReader("copy.txt");
		int len;
		while((len = fr.read())!=-1){
			System.out.print((char)len);
		}
		fr.close();
	}
}
public class IoDemo {

	/**
			字符流的文件 拷贝

		 */
	public static void main(String[] args) throws IOException {
		FileReader fr = new FileReader("copy.txt");
		FileWriter fw = new FileWriter("yyy.txt");
		int len;
		while((len = fr.read())!=-1){
			fw.write(len);
		}
		fr.close();
		fw.close();
	}
}
字符流也可以拷贝文本文件,但不推荐使用。因为读取时会把字节转为字符,写出时还要把字符转回字节.
程序需要读取一-段文本,或者需要写出一-段文本的时候可以使用字符流
读取的时候是按照字符的大小读取的,不会出现半个中文
写出的时候可以直接将字符串写出,不用转换为字节数组
字符流是否可以拷贝非纯文本的文件?
不可以拷贝非纯文本的文件
因为在读的时候会将字节转换为字符,在转换过程中,可能找不到对应的字符,就会用?代替,写出的时候会将字符转换成字节写出去
如果是?,直接写出,这样写出之后的文件就乱了,看不了了
public class IoDemo {

	/**
			 BufferedReader

public String readLine()
             读一行文字。 一行被视为由换行符('\ n'),回车符('\ r')中的任何一个或随后的换行符终止。 
结果 :
包含行的内容的字符串,不包括任何行终止字符,如果已达到流的末尾,则为null 
 BufferedWriter

public void newLine()
         写一行行分隔符。 行分隔符字符串由系统属性line.separator定义,并不一定是单个换行符('\ n')字符。 
		 */
	public static void main(String[] args) throws IOException {
	BufferedReader br  = new BufferedReader(new FileReader("ere.txt"));
	BufferedWriter bw = new BufferedWriter(new FileWriter("mmm.txt"));
	String line;
	while((line = br.readLine())!=null){
		bw.write(line);
		bw.newLine();
	}
	br.close();
	bw.close();
	}
}

5.p

ublic class IoDemo {

	/**
			将文本进行反转,第一行文本与最后一行文本进行置换
			
			流的一个使用原则:尽量晚开早关
		 */
	public static void main(String[] args) throws IOException {
	BufferedReader br  = new BufferedReader(new FileReader("ere.txt"));
	
	ArrayList<String> list = new ArrayList<String>();
	String line;
	while((line = br.readLine())!=null){
		list.add(line);
	}
	br.close();
	BufferedWriter bw = new BufferedWriter(new FileWriter("mmm.txt"));
	for(int i = list.size()-1;i>=0;i--){
		bw.write(list.get(i));
		bw.newLine();
	}
	
	bw.close();
	}
}

6.装饰设计模式

public class demoWrap {

	public static void main(String[] args) {
		GuaStudent gs = new GuaStudent(new Student());
		gs.code();
	}

}

interface Coder{
	public void code();
}

class Student implements Coder{

	@Override
	public void code() {
		System.out.println("前端");
		System.out.println("JAVA");
	}
	
}

class GuaStudent implements Coder{
	
	//1.获取装饰类的引用
	private Student s;
	//2.在构造方法中传入被修饰的对象
	public GuaStudent(Student s) {
		this.s = s;
	}
	//对原有的功能进行升级
	@Override
	public void code() {
		s.code();
		System.out.println("JAVAWeb");
		System.out.println("数据库");
	}
	
}
public class IoDemo {

	/**
			使用指定的编码方式读写字符
			InputStreamReader是从字节流到字符流的桥:它读取字节,并使用指定的charset将其解码为字符 。
			OutputStreamWriter是字符的桥梁流以字节流:向其写入的字符编码成使用指定的字节charset 。
		 */
	public static void main(String[] args) throws IOException {
	BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("gbk.txt"),"gbk"));
	BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("utf-8.txt"),"utf-8"));
	int c;
	while((c = br.read())!=-1){
		bw.write(c);
	}
	br.close();
	bw.close();
	}
}
public class digui {

	/**
	 * 输入一个文件夹路径,对其文件夹进行递归调用,打印出所有的.java文件
	 * @param args
	 */
	public static void main(String[] args) {
		File file = getDir();
		printJava(file);
		
		
	}
	//键盘录入获取文件路径
	public static File getDir() {
		Scanner sc = new Scanner(System.in);              //创建键盘录入对象
		while(true){
			String line = sc.nextLine();
			File dir = new File(line);
			if(!dir.exists()){
				System.out.println("您输入的路径不存在,请您从新输入");
			}else if(dir.isFile()){
				System.out.println("您输入的路径是文件夹路径,请您从新输入");
			}else{
				return dir;
			}
		}
	}
	
	//打印出java文件
	public static void printJava(File file) {
		File [] fileArr = file.listFiles();//获取路径下的所有文件
		for (File file2 : fileArr) {
			if(file2.isFile()&&file2.getName().endsWith(".java")){
				System.out.println(file2.getName());
			}else if(file2.isDirectory()){
				printJava(file2);
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值