Java学习作业(14.4.21)
前三次作业都是基础语法。真的好水啊。从这次开始记录。
1.编写Java程序,把当前目录下扩展名为txt的文件的扩展名全部更名为back。
1 import java.io.*; 2 import java.lang.*; 3 4 5 public class Home { 6 7 public void reName(String path, String from, String to) { 8 File f = new File(path); //声明File对象,用于导入修改路径 9 File[] fs = f.listFiles(); //声明File对象数组,用于存储f目录下的文件 10 for (int i = 0; i < fs.length; ++i) { 11 File f2 = fs[i]; //通过对各个文件的遍历,通过f2 取出各个文件 12 if (f2.isDirectory()) { 13 reName(f2.getPath(), from, to); //如果f2 是一个目录,则递归调用reName,更改子目录中的文件 14 } else { 15 String name = f2.getName(); 16 if (name.endsWith(from)) { //否则更改该文件下文件 17 f2.renameTo(new File(f2.getParent() + "/" + name.substring(0, name.indexOf(from)) + to)); 18 } 19 } 20 } 21 22 System.out.print("文件修改成功 \n"); 23 System.out.print("请到文件目录下查看修改:\n"); 24 } 25 26 public static void main(String[] args) { 27 Home rf = new Home(); 28 rf.reName("D:\\Desgard_Duan\\作业\\", ".txt", ".back"); 29 } 30 }
(一开始用eclipse成功运行,但是用控制台一直报“NullPointerError”,在9行后增加了如下代码,成果解决。感谢憨大哥。)
1 if (fs == null) { 2 System.out.println("目录中无法获取文件,程序退出。"); 3 System.exit(0); 4 }
2. 编写程序,用命令行参数实现比较两个文件是否长度和内容完全相同,输出比较结果(用Yes和No表示)。
1 import java.io.*; 2 import java.lang.*; 3 4 5 public class Home2 { 6 private String file1 = null; //用来存储对比的两个文件名 7 private String file2 = null; 8 9 public Home2(String file1, String file2) { 10 this.file1 = file1; 11 this.file2 = file2; 12 } 13 14 private void cmpFile(String file1, String file2) { 15 try { 16 BufferedInputStream inFile1 = new BufferedInputStream(new 17 FileInputStream(file1)); 18 BufferedInputStream inFile2 = new BufferedInputStream(new 19 FileInputStream(file2)); 20 //long startTime = System.currentTimeMillis(); //计算毫秒数 21 if(inFile1.available() == inFile2.available()) { 22 while(inFile1.read() != -1 && inFile2.read() != -1) { //如果文件没有读取到文件结尾处 23 if(inFile1.read() != inFile2.read()) { 24 System.out.println("No"); 25 break; 26 } 27 } 28 System.out.println("Yes"); 29 } else { 30 System.out.println("No"); 31 } 32 inFile1.close(); 33 inFile2.close(); 34 System.exit(0); 35 } catch(IOException error) { 36 error.printStackTrace(); 37 } 38 } 39 40 private static String inputFileName() { 41 String fileName = null; 42 BufferedReader buffRead1 = new BufferedReader(new InputStreamReader(System.in)); //通过缓存方式读取文本,由Reader类扩展而来 43 try { 44 fileName = buffRead1.readLine(); 45 } catch(IOException error) { 46 error.printStackTrace(); 47 } 48 return fileName; 49 } 50 51 public static void main(String[] args) { 52 System.out.println("please input the two files' full path and name:"); 53 System.out.print("File1:"); 54 String file1 = inputFileName(); 55 System.out.print("File2:"); 56 String file2 = inputFileName(); 57 Home2 fileCompare = new Home2(file1, file2); 58 fileCompare.cmpFile(file1, file2); 59 } 60 }
(此题没有什么难度,只要用学会文件读取,逐个字符进行检查即可。在编写包内类的时候,最好的习惯是给每个成员写入set和get方法,笔者有些偷懒。)
3.编写控制台(字符界面)应用程序,实现文件按字节异或加密。要求输入一字节密钥key和源文件名。建立加密文件,加密文件第1字节为密钥key,以后各字节为源文件各字节与密钥进行异或运算的结果编写另程序实现解密(由加密文件还原源文件)。此题鼓励同学自拟图形界面,综合运用对话框或视窗、文件对话框、多种Component、事件响应来实现加密解密功能。
import java.util.*;import java.io.*; import java.util.*; import java.awt.*; import java.awt.event.*;public class Text {Frame f = new Frame("文件加/解密GUI演示");MenuBar mb = new MenuBar();Menu me = new Menu("功能");NewPanel p = new NewPanel();Text() {me.add(new MenuItem("加密"));me.add(new MenuItem("解密"));me.add(new MenuItem("-"));me.add(new MenuItem("退出"));mb.add(me);f.setMenuBar(mb);f.add(p);f.setSize(new Dimension(600, 300));f.setLocation(400, 200);f.setVisible(true);me.addActionListener(p);f.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});}public static void main(String[] args) {new Text();}class NewPanel extends Panel implements ActionListener {Label la1 = new Label();Label la2 = new Label();Label la3 = new Label();Button bu1 = new Button("打开");Button bu2 = new Button("打开");Button bu3 = new Button();TextField tf = new TextField(4);Panel p1 = new Panel();Panel p2 = new Panel();Panel p3 = new Panel();File file1 = null, file2 = null;NewPanel() {p1.add(la1); p1.add(bu1);p2.add(la2); p2.add(bu2);p3.add(la3); p3.add(tf); p3.add(bu3);this.setLayout(new BorderLayout());this.add("North", p1); p1.setVisible(false);this.add("Center", p2); p2.setVisible(false);this.add("South", p3); p3.setVisible(false);bu1.addActionListener(this);bu2.addActionListener(this);bu3.addActionListener(this);}public void actionPerformed(ActionEvent e) {if (e.getSource() == bu1) {FileDialog fd = new FileDialog(f, "打开文件");fd.setVisible(true);if (fd.getFile() != null) {file1 = new File(fd.getDirectory() + fd.getFile());la1.setText("第一个文件:" + file1.getAbsolutePath());}} else if (e.getSource() == bu2) {FileDialog fd = new FileDialog(f, "打开文件");fd.setVisible(true);if (fd.getFile() != null) {file2 = new File(fd.getDirectory() + fd.getFile());la2.setText("第二个文件:" + file2.getAbsolutePath());}} else if (e.getSource() == bu3 && e.getActionCommand() == "加密") {try {BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file1));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file2));// write keyint key = Integer.parseInt(tf.getText());bos.write(key);for (int _; (_ = bis.read()) >= 0; ) bos.write(_^key);bis.close(); bos.close();la3.setText("加密成功"); tf.setVisible(false);bu3.setVisible(false);p3.setVisible(true);} catch (IOException _) {}} else if (e.getSource() == bu3 && e.getActionCommand() == "解密") {try {BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file1));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file2));int key = bis.read();if (key < 0) {} else {for (int _; (_ = bis.read()) >= 0; ) bos.write(_^key);}bis.close(); bos.close();la3.setText("解密成功");la3.setVisible(true);tf.setVisible(false);bu3.setVisible(false);p3.setVisible(true);} catch (IOException _) {}} else if (e.getActionCommand() == "加密") {la1.setText("选择需加密文件:"); p1.setVisible(true);la2.setText("选择加密到文件:");p2.setVisible(true);la3.setText("请输入密匙(1~255):");la3.setVisible(true);tf.setVisible(true);bu3.setLabel("加密");bu3.setVisible(true);p3.setVisible(true);} else if (e.getActionCommand() == "解密") {la1.setText("选择需解密文件:"); p1.setVisible(true);la2.setText("选择解密到文件:");p2.setVisible(true);la3.setText("请输入密匙(1~255):");bu3.setLabel("解密");bu3.setVisible(true);la3.setVisible(false);tf.setVisible(false);p3.setVisible(true);} else if (e.getActionCommand() == "退出") {System.exit(0);}// 可以重排所有组件f.setVisible(false);f.setVisible(true);} } }
(憨大哥大代码直接抄来了。最近要准备其他事情。唉。。)
4. 输入打印行数n,打印如下字符图形到屏幕上和字符文件abc.txt中。
1 import java.io.*; 2 import java.lang.*; 3 import java.util.*; 4 5 6 public class Home4 { 7 public static void WriteStringToFile(String filePath, String text) { 8 try { 9 File file = new File(filePath); 10 PrintStream ps = new PrintStream(new FileOutputStream(file)); 11 ps.println(text); 12 } catch (FileNotFoundException error) { 13 error.printStackTrace(); 14 } 15 } 16 public static void main(String[] args) { 17 Scanner in = new Scanner(System.in); 18 int n = in.nextInt(); 19 String text = ""; 20 int num = 1; 21 for(int i = 1; i <= n; i++) { 22 for(int j = 0; j < n - i; j++) { 23 System.out.print("\t"); 24 text += "\t"; 25 } 26 for(int j = 1; j <= i; j++) { 27 System.out.print(num + "\t"); 28 text += String.valueOf(num); 29 text += "\t"; 30 num += 2; 31 } 32 System.out.println(); 33 text += "\r\n"; 34 } 35 WriteStringToFile("abc.txt", text); 36 37 } 38 39 }
(最简单的一道作业题目,不多说。)
5. 已知学生类含有实例属性(姓名、学号、成绩),实例方法(构造方法、getter方法)。建立字符文件a.txt,第一行为一个整数(表示学生人数),第二行开始,每行提供一个学生所需的实例属性值。编写程序1,从a.txt输入学生人数和学生信息,建立学生数组。将所有学生数组各元素写入二进制文件a.dat(a.dat的开头4字节为表示学生数的整数)。编写程序2,从a.dat读出学生数据输出为字符文件b.txt(输入出格式同a.txt)。编写程序3读入a.dat数据,用随机文件方式删除成绩<60分的学生记录并存回a.dat。(程序2用于检查程序1和程序2的结果是否正确)。
import java.io.*; import java.util.*; import java.text.*;public class Text {public static void main(String[] args) throws Exception {fun_1();//fun_2();//fun_3(); }public static void fun_1() throws IOException {Scanner cin = new Scanner(new File("a.txt"));int N = cin.nextInt();Student[] stu = new Student[N];for (int i = 0; i < N; ++i) {stu[i] = new Student(cin.next(), cin.next(), cin.nextFloat());}ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("a.dat")));oos.write(Chg.toByte(N));for (Student _ : stu) {oos.writeObject(_);}cin.close();oos.close();}public static void fun_2() throws Exception {ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream("a.dat")));byte[] b = new byte[4];ois.read(b);int N = Chg.toInt(b);PrintWriter pw = new PrintWriter(new BufferedOutputStream(new FileOutputStream("b.txt")));pw.printf("%d\r\n", N);for (int i = 0; i < N; ++i) {Student stu = (Student)ois.readObject();DecimalFormat fmt= new DecimalFormat("###.##");pw.println(stu.getName() + " " + stu.getNumber() + " " + fmt.format(stu.getScore()));}ois.close();pw.close();}public static void fun_3() throws Exception {// 重写a.datScanner cin = new Scanner(new File("a.txt"));// RandAccessFile只有"rw"和"r",没有"w"RandomAccessFile oos = new RandomAccessFile("a.dat", "rw");int N = cin.nextInt();oos.writeInt(N);for (int i = 0; i < N; ++i) {String name = cin.next();String number = cin.next();float score = cin.nextFloat();oos.writeUTF(name);oos.writeUTF(number);oos.writeFloat(score);}cin.close();oos.close();//开始删除RandomAccessFile raf = new RandomAccessFile("a.dat", "rw");N = raf.readInt();int M = 0;for (int i = 0; i < N; ++i) {String name = raf.readUTF();String number = raf.readUTF();float score = raf.readFloat();if (score < 60) continue;++M;}long r = 0, w = 0;raf.seek(0); raf.readInt(); r = raf.getFilePointer();raf.seek(0);raf.writeInt(M);w = raf.getFilePointer();for (int i = 0; i < N; ++i) {raf.seek(r);String name = raf.readUTF();String number = raf.readUTF();float score = raf.readFloat();r = raf.getFilePointer();if (score < 60) continue;raf.seek(w);raf.writeUTF(name);raf.writeUTF(number);raf.writeFloat(score);w = raf.getFilePointer();}raf.setLength(w);raf.close();//转换到"b.txt"RandomAccessFile ois = new RandomAccessFile("a.dat", "r");PrintWriter pw = new PrintWriter(new BufferedOutputStream(new FileOutputStream("b.txt")));N = ois.readInt();pw.printf("%d\r\n", N);for (int i = 0; i < N; ++i) {String name = ois.readUTF();String number = ois.readUTF();Float score = ois.readFloat();DecimalFormat fmt= new DecimalFormat("###.##");pw.println(name + " " + number + " " + fmt.format(score));}ois.close();pw.close();} }class Student implements Serializable {private String name;private String number;private float score;Student() {}Student(String _name, String _number, float _score) {name = _name;number = _number;score = _score;}public String getName() {return name;}public String getNumber() {return number;}public float getScore() {return score;}public void setName(String _name) {name = _name;}public void setNumber(String _number) {number = _number;}public void setScore(float _score) {score = _score;} }class Chg {public static byte[] toByte(int x) {byte[] b = new byte[4];for (int i = 0; i < 4; ++i) {b[i] = (byte)(x&0xff);x >>= 8;}return b;}public static int toInt(byte[] b) {int x = 0;for (int i = 0; i <b.length; ++i)x |= (b[i]&0xff)<<(i*8);return x;} }
收获:通过独立完成java课堂题目,了解了java的基本文件的方法,熟悉了处理文件十分基础的API。希望自身不断提高,争取熟练掌握文件控制。
Desgard_Duan 写于2014.4.27
转载于:https://www.cnblogs.com/Destiny-Gem/p/3695249.html
Java学习作业(14.4.21)相关推荐
- thinking in java 学习笔记 14 类型信息
第十四章 类型信息 尼玛,刚刚看完了亚冠,恒大这样都被连扳3球,尼玛的垃圾孙祥,恨死了那个全北现代 好吧,回到学习上 运行时类型信息使得你可以再程序运行时发现和使用类型信息 本章讨论的是java如何让 ...
- Java学习lesson 14
*数据结构 *栈结构(先进后出,后进先出) 特点:进栈的方式叫压栈 出栈的方式叫弹栈 *队列(先进先出) *数组(查询快,增删慢) *链表结构 有很多链子将多个节点连接起来 每一个节点(数据):数据域 ...
- Java学习笔记14
Object类是所有类.数组.枚举类的父类,是类层次结构的根类.每个类都使用Object作为超类.所有对象(包括 数组)都实现这个类的方法. Object类实现了以下方法: 我们来看看源码中clone ...
- java学习(14):java命名规范
//任务 4 在控制台打印输出java标识符定义规则.具体包括: //1)类名定义规则 //2)方法名定义规则 //3)变量定义规则 //4)常量定义规则 一.命名规范 1. 项目名全部小写 2. 包 ...
- Java学习笔记14(接口+工厂模式)
文章目录 接口 接口的特点: **为什么要接口** 工厂模式 接口 Java不支持多重继承.有了接口,就可以得到多重继承的效果. 接口(interface)是抽象方法和常量值的定义的集合. 从本质上讲 ...
- java笔记冯佳微盘,JAVA学习笔记14 - osc_vsdge2u3的个人空间 - OSCHINA - 中文开源技术交流社区...
01(Map集合概述和特点) * A:Map接口概述 * 查看API可以知道: * 将键映射到值的对象 * 一个映射不能包含重复的键 * 每个键最多只能映射到一个值 * B:Map接口和Collect ...
- Java学习日志-第14天
常用API String 概述 * java.lang.String : 是字符串类 底层就是一个final修饰的char数组,所以String很多特性就是数组的特性,* * 比如 一旦确定,长度 ...
- 【Java】Java学习笔记(2)——Java面向对象基础作业函数题
本人私人博客:Megalomania,大部分文章会现在博客上传,有不足之处欢迎指正. 学校小学期Java课程的练习题,留个档便于以后需要时候有例子可以回忆,写的烂的地方请多多包含 1.求两个数值之和 ...
- Java学习-14 CSS与CSS3美化页面及网页布局
Java学习-14 CSS与CSS3美化页面及网页布局 1. CSS简介 什么是CSS? CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示控制 HTML 元素, ...
最新文章
- mysql的ERROR:1042
- go语言中利用匿名函数和闭包实现文件名修改
- VTK:PolyData之ImplicitPolyDataDistance
- 自定义图片,实现透明度动态变化
- MVC与三层架构的联系及三层架构实现学生注册功能
- 第一次给知名项目贡献代码,有点紧张
- Serverless实战之路
- Cookie学习总结
- 【codevs1245】最小的N个和
- 孙鑫VC学习笔记:第十五讲 (三) 增加互斥条件实现线程同步
- 输入法影响JDK字体?
- 【C语言程序】带你用17行代码编译一个C语言数字雨
- 拷贝出师表到另一个文件,恢复顺序
- 学习规律及其在学习中的应用
- matlab最小拍控制怎么求传递函数,基于Matlab 的最少拍控制系统设计
- 数据库范式——(1NF,2NF,3NF,BCNF,含实例分析)
- 【英语学习】【WOTD】hamartia 释义/词源/示例
- SPI在linux3.14.78 FS_S5PC100(Cortex A8)和S3C2440上驱动移植(deep dive)
- 如何使用统计显着性检验来解释机器学习结果
- .Net CLR运行时是如何编译函数的
热门文章
- cuda Synchronization Functions
- Python AES
- python 内置运算
- 输入关键字生成对联_教你一秒变大师,亲手提笔写对联
- mysql表空间转移_mysql共享表空间扩容,收缩,迁移
- CDM是什么?和CDP有什么区别?
- 浅谈:Hadoop、spark、SaaS、PaaS、IaaS、云计算
- Spring Boot学习总结(1)——Spring Boot入门
- html flex 表单样式,Flexbox 布局的最简单表单的实现
- java生成不重复随机数_生成不重复随机数 java