前三次作业都是基础语法。真的好水啊。从这次开始记录。
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、事件响应来实现加密解密功能。
(对于UI掌握以及文件加密掌握不太熟悉,之后会完成。先进行后面的作业。)
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 }
(最简单的一道作业题目,不多说。)
收获:通过独立完成java课堂题目,了解了java的基本文件的方法,熟悉了处理文件十分基础的API。希望自身不断提高,争取熟练掌握文件控制。
Desgard_Duan 写于2014.4.27
Java学习作业(14.4.21),码迷,mamicode.com
时间: 2024-12-26 09:53:54