软件逆向工程-dll消息钩取
- JAVA实验 文件流操作
- Assignment
- Environment
- Solutions
- 结果
- Code
- 8-7
- Code
JAVA实验 文件流操作
Assignment
8-2
实现一个程序,该程序的输人是一个目录字符串和一个文件扩展名字符串,程序递归地搜索该目录及其各级子目录,在这些目录中查找所有扩展名与指定扩展名相同的文件,将这些文件的相对路径名记录下来并向控制台输出。8-7
实现两个程序,第一个程序读入一个文件plain.txt将读入的每个字节的数值加5,然后输出到另一个文件cipher.ixt中,第二个程序从cipher.txt中读取每个字节,将每个字节的数值减5.再输出到文件decrypt.txt中。比较plain.txt与decrypt.txt的内容。
Environment
idea2017 jdk1.8
Solutions
8-2
本题最关键的就是如何使用递归实现finFile方法(寻找路径下对应后缀名)
需要三个参数
File path,String name ,int len
Path:寻找的路径
Name:文件的后缀名
Len:寻找的路径的字符串长度(用于最后输出相对路径服务)
这两句实现了遍历寻找文件
路径下存在文件或者下一级目录,文件使用目录判断后缀名是否符合要求,若为目录则递归进入寻找。
结果
在E:\111中寻找txt文件
1123目录
可以看出路径下的所有txt都被找出,不管是根目录还是子目录中
Code
//java homework 8.2 寻找目录下的指定扩展名的文件
import java.io.*;
import java.util.Scanner;
public class homework82{
public static void findFile(File path,String name ,int len){
if(path.isDirectory())
{
File[] files = path.listFiles();//listFiles() listFiles()方法是返回某个目录下所有文件和目录的绝对路径,返回的是File数组
for(File file:files)//遍历路径下的文件
{
if(file.isFile()) {//只判断文件
String fileName = file.getName();
String extension = fileName.substring(fileName.lastIndexOf(".") + 1);//截取文件后缀 substring() 方法用于提取字符串中介于两个指定下标之间的字符 一个参数只选最后一个.之后
if (extension.equals(name)) {
System.out.println("find file: " + "相对路径 .\\" + file.getPath().substring(len + 1));
//System.out.println(fileName + " : .\\" + file.getPath().substring(len + 1));//获取相对路径
}
}
else{
findFile(file,name,len);//递归
}
}
}
else{
System.out.println("it is not a Directory.");
}
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.print("搜索路径名:");
String str = in.nextLine();
File path = new File(str );
System.out.println("文件路径:"+str);
in = new Scanner(System.in);
System.out.print("文件后缀:");
str = in.nextLine();
String extension = new String(str);
System.out.println("后缀名"+str);
int len = path.getPath().length();
findFile(path,extension,len);
}
}
8-7
这一题需要实现两个程序,一个程序用于加密文件(移位加密)
一个程序用于解密与验证。
加密部分代码,参考课本p171代码,依次从plain.txt读取c,给c位移5,然后写入到cipher.txt
解密部分代码,参考课本p171代码,依次从cipher.txt读取c,给c位移-5,然后写入到decrypt.txt
验证部分,同理依次读取plain.txt和decrypt.txt的字符进行比较,相同则过程正确。
结果
加密
解密与验证
查看实际文件变化
Code
//java homework 8.7 加密解密文件 并且判断加解密后是否相同
import java.io.*;
import java.util.Scanner;
//参考课本p171代码
public class homework87 {
public static void main(String args[])throws IOException
{
FileInputStream in = new FileInputStream("E:\\111\\plain.txt");
FileOutputStream out = new FileOutputStream("E:\\111\\cipher.txt");
int c;
while( (c = in.read()) != -1){
out.write(c+5);
}
in.close();
out.close();
System.out.println("encry successfully");
}
}
//java homework 8.7 加密解密文件 并且判断加解密后是否相同
import java.io.*;
import java.util.Scanner;
//参考课本p171代码
public class homework87_2{
public static void main(String args[])throws IOException
{
FileInputStream in = new FileInputStream("E:\\111\\cipher.txt");
FileOutputStream out = new FileOutputStream("E:\\111\\decrypt.txt");
int c;
while( (c = in.read()) != -1){
out.write(c-5);
}
in.close();
out.close();
System.out.println("decry successfully");
FileInputStream plain = new FileInputStream("E:\\111\\plain.txt");
FileInputStream decrypt = new FileInputStream("E:\\111\\decrypt.txt");
int m1,m2;
int flag = 0;
while( (m1 = plain.read()) != -1){
if( (m2 = decrypt.read()) != -1){
if(m1 == m2){
flag = 1;
continue;
}
else{
System.out.println("different");
flag = 0;
break;
}
}
else {
System.out.println("different");
flag = 0;
break;
}
}
if(flag == 1){
System.out.println("same");
}
plain.close();
decrypt.close();
//p判断是否相同
}
}