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);
}
}
}
}