-----------------------------------------------------------------------------------
类 FileReader
方法
void read();
类 FileWriter
void write();
字符流一般是在操作纯文本的时候使用不会出现乱码;
------------------------------------------------------------------------------------
只读
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("a.txt");
int ch;
while((ch = fr.read()) != -1) { //read()方法是通过编码表按照字符的大小读取
System.out.print((char)ch);
}
fr.close();
}
-------------------------------
只写
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("b.txt"); //创建字符输出流对象,关联b.txt
fw.write(97); //写出一个字符
fw.write("你要减肥,造吗?"); //写出一个字符串
fw.close(); //关流
}
--------------------------------
字符流与字节流拷贝纯文本文件时那个更快更好;
答:字节流更快;
因为字符流在读的时候会将字节转换成字符在写的时候又会将字符转成字节写出:
而字节流 是直接操作字节不存在翻译所以说字节流更快更好;
字符流是否能拷贝纯文本?
答:
字符流不能拷贝纯文本
当字符流拷贝非纯文本和纯文本是一样的。而在读时没有找到合适的就会转换成"?"写的时候就会写出"?"
这样就会导致数据丢失所以字符流不能拷贝纯文本文件;
------------------------------------------------------------------
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("a.txt");
FileWriter fw = new FileWriter("b.txt");
char[] arr = new char[8192]; //自定义缓冲区
int len;
while((len = fr.read(arr)) != -1) {
fw.write(arr, 0, len);
}
fr.close();
fw.close();
}
--------------------------------------------------------------------------
类BuffferedReader
方法
int read();
String readLine();
类BufferedWriter
void write(String str); //写
void write(int b)
newLine(); //换行
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Buffercopy{
public static void main(String[] args) throws IOException {
//demo1();
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
String line;
while((line = br.readLine()) != null) {
bw.write(line);
//bw.write("\r\n"); //只支持的是windows系统
bw.newLine(); //可以跨平台(操作系统)
}
br.close();
bw.close();
}
public static void demo1() throws FileNotFoundException, IOException {
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
int ch;
while((ch = br.read()) != -1) {
bw.write(ch);
}
br.close();
bw.close();
}
}
--------------------------------------------------------------------------
获取行号
* 通过getLineNumber()和setLineNumber()方法我们知道肯定有lineNumber,当readLine()一次
* lineNumber就自身+1一次,所以每次通过getLineNumber()获取行号的时候都是变化的
*/
public static void main(String[] args) throws IOException {
LineNumberReader lnr = new LineNumberReader(new FileReader("b.txt"));
String line;
lnr.setLineNumber(100);
while((line = lnr.readLine()) != null) {
System.out.println(lnr.getLineNumber() + ":" + line);
}
lnr.close();
}
-----------------------------------------------------------------
装饰设计模式
装饰设计模式的好处是耦合性降低了,被装饰类,可以被装饰,也可以不被装饰,也可以选择其他的装饰
AB两个类实现一个接口重写方法。将要处理的A对象通过构造传入给B对象声明到成员:在B中重写接口中的方法。在重写的方法里调用A重写的方法
方法然后拓展:(文学功底有限)
如下:
-----------------------------------------------------
class d{
public static void main(String[] args) {
ItcastStudent is = new ItcastStudent(new Student());
is.code();
Student s = new Student();
s.code();
}
}
}
interface Coder {
public void code();
}
class A implements Coder {
public void code() {
System.out.println("上课打扑克");
System.out.println("英雄联盟");
System.out.println("谈女朋友");
}
}
class B implements Coder {
private Student s;
public ItcastStudent(Student s) {
this.s = s;
}
@Override
public void code() {
s.code();
System.out.println("ssh");
System.out.println("数据库");
System.out.println("安卓");
System.out.println("大数据");
System.out.println("天下无敌");
}
}
-------------------------------------------------------------------------------
以上是IO第二天
|
|