网站建设企业网站,宿迁商城网站建设,黎平网站建设,98建筑网站练习1#xff1a;拷贝文件 四种方式拷贝文件#xff0c;并统计各自用时。 字节流的基本流#xff1a;一次读写一个字节 字节流的基本流#xff1a;一次读写一个字节数组 字节缓冲流#xff1a;一次读写一个字节 字节缓冲流#xff1a;一次读写一个字节数组 这里我只使用了…
练习1拷贝文件 四种方式拷贝文件并统计各自用时。 字节流的基本流一次读写一个字节 字节流的基本流一次读写一个字节数组 字节缓冲流一次读写一个字节 字节缓冲流一次读写一个字节数组 这里我只使用了字节缓冲流进行实现分别是一次读写一个字节和一次读写一个字节数组。
我写的时候还有一个问题就是我搁那拷贝文件夹呢一直出现 D:\垃圾邮件\chinese-spam-filter-master (拒绝访问。)这种错误原因就是流操作的是文件路径不对解决了半天。
public class BIO4 {public static void main(String[] args) throws IOException {//method1();method2();}private static void method1() throws IOException {BufferedInputStream bis new BufferedInputStream(new FileInputStream(D:\\Java学习资料\\day10-字符串\\笔记\\常用API.md));BufferedOutputStream bos new BufferedOutputStream(new FileOutputStream(bbb.md));int b;long startTime System.currentTimeMillis();while ((b bis.read()) ! -1) {bos.write(b);}long endTime System.currentTimeMillis();bos.close();bis.close();System.out.println(endTime - startTime);}private static void method2() throws IOException {BufferedInputStream bis new BufferedInputStream(new FileInputStream(D:\\Java学习资料\\day10-字符串\\笔记\\常用API.md));BufferedOutputStream bos new BufferedOutputStream(new FileOutputStream(bbb.md));byte[] buffer new byte[1024 * 1024 * 5];int len;long startTime System.currentTimeMillis();while ((len bis.read(buffer)) ! -1) {bos.write(buffer, 0, len);}long endTime System.currentTimeMillis();bos.close();bis.close();System.out.println(endTime - startTime);}
}练习2 修改文本顺序 需求把《出师表》的文章按顺序恢复到一个新的文件中。 下面就是需要恢复顺序的《出师表》的文章前面的序号是文章的正确顺序。
3.侍中、侍郎郭攸之、费祎、董允等此皆良实志虑忠纯是以先帝简拔以遗陛下。愚以为宫中之事事无大小悉以咨之然后施行必得裨补阙漏有所广益。
8.愿陛下托臣以讨贼兴复之效不效则治臣之罪以告先帝之灵。若无兴德之言则责攸之、祎、允等之慢以彰其咎陛下亦宜自谋以咨诹善道察纳雅言深追先帝遗诏臣不胜受恩感激。
4.将军向宠性行淑均晓畅军事试用之于昔日先帝称之曰能是以众议举宠为督。愚以为营中之事悉以咨之必能使行阵和睦优劣得所。
2.宫中府中俱为一体陟罚臧否不宜异同。若有作奸犯科及为忠善者宜付有司论其刑赏以昭陛下平明之理不宜偏私使内外异法也。
1.先帝创业未半而中道崩殂今天下三分益州疲弊此诚危急存亡之秋也。然侍卫之臣不懈于内忠志之士忘身于外者盖追先帝之殊遇欲报之于陛下也。诚宜开张圣听以光先帝遗德恢弘志士之气不宜妄自菲薄引喻失义以塞忠谏之路也。
9.今当远离临表涕零不知所言。
6.臣本布衣躬耕于南阳苟全性命于乱世不求闻达于诸侯。先帝不以臣卑鄙猥自枉屈三顾臣于草庐之中咨臣以当世之事由是感激遂许先帝以驱驰。后值倾覆受任于败军之际奉命于危难之间尔来二十有一年矣。
7.先帝知臣谨慎故临崩寄臣以大事也。受命以来夙夜忧叹恐付托不效以伤先帝之明故五月渡泸深入不毛。今南方已定兵甲已足当奖率三军北定中原庶竭驽钝攘除奸凶兴复汉室还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益进尽忠言则攸之、祎、允之任也。
5.亲贤臣远小人此先汉所以兴隆也亲小人远贤臣此后汉所以倾颓也。先帝在时每与臣论此事未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军此悉贞良死节之臣愿陛下亲之信之则汉室之隆可计日而待也。
首先需要把文章中的所有内容读取出来之后才能进行后续的操作所以要先放到集合中。至于是哪种集合则需要根据需求进行考虑。
分析
读取文章的所有内容放到集合中对集合中的内容按照规则进行排序再写入到文件中。
关于步骤1没什么好说的都一样但是选取的集合有两种。
实现一
首先考虑到的就是TreeMap集合因为可以进行排序。
关于写入文件在这里是集合中的元素一个一个单独写入的。
public class BIO5 {public static void main(String[] args) throws IOException {BufferedReader br new BufferedReader(new FileReader(bbb//csb.txt));String str;TreeMapInteger, String tm new TreeMap();while ((str br.readLine()) ! null) {String[] s str.split(\\.);tm.put(Integer.parseInt(s[0]), s[1]);}br.close();// 将汉字写入BufferedWriter bw new BufferedWriter(new FileWriter(bbb//copy.txt));for (Integer i : tm.keySet()) {String s tm.get(i);bw.write(s);bw.newLine();}bw.close();其实还可以一下全部写入采用toString()方法将集合中的内容转换为字符串。
String s tm.toString().replace(, , \n).replace(, .);
bw.write(s);
bw.close();
实现二视频里还有一种思路用的是ArrayList集合。
全部元素添加完成后使用集合工具类Collections的sort方法进行排序并指定排序规则。这个方法虽然也可以实现但我觉得并不是很好因为有可排序的集合存在要挑选更好的使用。 BufferedReader br new BufferedReader(new FileReader(bbb//csb.txt));String str;ArrayListString list new ArrayList();while ((str br.readLine()) ! null) {list.add(str);}Collections.sort(list, new ComparatorString() {Overridepublic int compare(String o1, String o2) {int i1 Integer.parseInt(o1.split(\\.)[0]);int i2 Integer.parseInt(o2.split(\\.)[0]);return i1 - i2;}});
Tips当向文件中写入数据时没有关闭流时会发现数据并没有写入是因为没有把数据刷新进去。
练习3软件运行次数 实现一个验证程序运行次数的小程序要求如下: 1.当程序运行超过3次时给出提示本软件只能免费使用3次,欢迎您注册会员后继续使用~ 2.程序运行演示如下 第一次运行控制台输出:欢迎使用本软件,第1次使用免费~ 第二次运行控制台输出:欢迎使用本软件,第2次使用免费~ 第三次运行控制台输出:欢迎使用本软件,第3次使用免费~ 第四次及之后运行控制台输出:本软件只能免费使用3次,欢迎您注册会员后继续使用~ 在这个练习中以前都是在程序中运行与内存打交道程序运行结束时数据就不存在了。但是现在学习了IO就可以将数据写入到外部文件中了将数据进行保存。
分析
1、运行程序时首先读取文件中保存的次数
2、然后进行比较再决定是否写入。
代码实现
public class BIO7 {public static void main(String[] args) throws IOException {BufferedReader br new BufferedReader(new FileReader(bbb/count.txt));String s br.readLine();BufferedWriter bw new BufferedWriter(new FileWriter(bbb/count.txt));if (s null) {bw.write(1);System.out.println(欢迎使用本软件,第1次使用免费~);} else {int count Integer.parseInt(s);if (count 3) {System.out.println(本软件只能免费使用3次,欢迎您注册会员后继续使用~);} else {count;bw.write(Integer.toString(count));System.out.println(欢迎使用本软件,第 count 次使用免费~);}}bw.close();br.close();}
}但是在视频中却是先创建出文件然后手动写入次数0。 问题-1转换为char类型的值为什么是\uFFFF
在Java中char 类型是一个 16 位的无符号整数范围从 0 到 65535即 0x0000 到 0xFFFF。当你将一个整数赋给 char 类型时会发生强制类型转换整数的值将被解释为对应的 Unicode 字符。
如果你将整数 -1 转换为 char 类型实际上是将其视为 Unicode 码点 0xFFFF即特殊符号 REPLACEMENT CHARACTER它通常表示未知字符或无法识别的字符。
下面是将 -1 转换为 char 类型的示例代码
int num -1;
char ch (char) num;
System.out.println(Unicode code point of -1 is: (int) ch); // 输出 65535
System.out.println(Character represented by -1 is: ch); // 输出 \uFFFF