Java学习-IO流-综合练习
字节流和字符流的使用场景
字节流:拷贝任意类型文件
字符流:读取纯文本文件中的数据,向纯文本文件中写数据
练习1:拷贝文件夹
public static void main(String[] args){File src = new File("..\\src");File dest = new File("..\\dest");copydir(src,dest);
}
private static void copydir(File src,File dest){dest.mkdirs();File files = src.listFiles();for(File file : files){if(file.isFile){//复制文件FileInputStream fis = new FileInputStream(file);FileOutputStream fos = new FileOutputStream(new File(dest,file.getName()));byte[] bytes = new byte[1024];int len;while((len = fis.read(bytes))!=-1){fos.write(bytes,0,len);}fos.close();fis.colse();}else{//递归复制文件夹copydir(file,new File(dest,file.getName()));}}
}
练习2:文件加密
^:异或
true ^ false = true
false ^ true = true
true ^ true = false
false ^ false = false
100 ^ 10 = 110
110 ^ 10 = 100
一个数字异或另一个数字两次等于这个数字本身
第一次(加密)
第二次(解密)
FileInputStream fis = new FileInputStream("..\\a.jpg");
FileOutputStream fos = new FileOutputStream("..\\ency.jpg");
int b;
while((b=fis.read())!=-1){fos.wirte(b^2);
}
fos.close();
fis.close();
FileInputStream fis = new FileInputStream("..\\ency.jpg");
FileOutputStream fos = new FileOutputStream("..\\redu.jpg");
int b;
while((b=fis.read())!=-1){fos.wirte(b^2);
}
fos.close();
fis.close();
练习3:修改文件中的数据
文本文件中的数据:2-1-8-4-7-8
修改成排序后的数据:1-2-4-7-8-9
FileReader fr = new FileReader("..\\xx.txt");
StringBuilder sb = new StringBuilder();
int ch;
while((ch=fr.read())!=-1){sb.append((char)ch);
}
fr.close();
sout(sb);//→ 2-1-9-4-7-8String str = sb.toString();
String[] arrStr = str.split("-");
ArrayList<Integer> list = new ArrayList<>();
for(String s:arrStr){int i = Integer.parseInt(s);list.add(i);
}
sout(list);//→ [2,1,9,4,7,8]Collections.sort(list);
sout(list);//→ [1,2,4,7,8,9]
FileWriter fw = new FileWriter("..\\xx.txt");
for(int i=0;i<list.size();i++){if(i==list.size()-1){fw.write(list.get(i)+"");//写字符串而不是数字在编码表对应的字符}else{fw.write(list.get(i)+"-");}
}
fw.close();
FileReader fr = new FileReader("..\\xx.txt");
StringBuilder sb = new StringBuilder();
int ch;
while((ch=fr.read())!=-1){sb.append((char)ch);}
fr.close();
sout(sb);//→ 2-1-9-4-7-8Integer[] arr = Arrays.stream(sb.toString().split("-")).map(Integer::parseInt).sorted().toArray(Integer[]::new)
sout(arr);//→ [1,2,4,7,8,9]FileWriter fw = new FileWriter("..\\xx.txt");
String s = Arrays.toString(arr).replace(", ","-");
String res = s.substring(1,s.length()-1);
sout(res);//→ 1-2-4-7-8-9
fw.write(res);
fw.close();
细节:文件中的数据不要换行,否则数据后会隐藏\r\n,影响结果