一.文件拷贝
拷贝一个文件夹,需要考虑子文件夹
import java.io.*;
public class IO {
public static void main(String[] args) throws IOException {
File f = new File("C:\\Users\\21566\\IdeaProjects\\untitled");
File copy = new File("C:\\Users\\21566\\IdeaProjects\\untitled6\\copy");
Directory(f, copy);
}
private static void Directory(File f, File copy) throws IOException {
copy.mkdirs();//创建copy地址的多级文件夹,防止因为该文件夹不存在而报错
File[] files = f.listFiles();
for (File file : files) {
if (file.isDirectory()) {
Directory(file, new File(copy, file.getName()));//如果该文件是一个文件夹则递归调用Directory方法搜寻其中的内容
}
if (file.isFile()) {
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(new File(copy, file.getName()));//拷贝写入时,应该写入该文件原本的名字和格式
byte[] b = new byte[1024];
int len;
while ((len = fis.read(b)) != -1) {
fos.write(b, 0, len);
}
fos.close();
fis.close();
}
}
}
}
二.文件加密
为了保证文件的安全性,需要对原始文件进行加密存储,在使用的时候再对其进行解密处理
加密原理:对原始文件中的每一个字节数据进行更改,然后将更改后的数据存储到新的文件中
解密原理:读取加密之后的文件,按照加密的规则反向操作变成原始文件
import java.io.*;
public class IO {
public static void main(String[] args) throws IOException {
File secretfile = new File("C:\\Users\\21566\\IdeaProjects\\untitled6\\bbb\\copy.txt");
File lockedfile = new File("C:\\Users\\21566\\IdeaProjects\\untitled6\\bbb\\lock.txt");
File initfile = new File("C:\\Users\\21566\\IdeaProjects\\untitled6\\bbb\\init.txt");
lock(secretfile, lockedfile);
key(lockedfile, initfile);
}
private static void lock(File secretfile, File lockedfile) throws IOException {
FileInputStream fis = new FileInputStream(secretfile);
FileOutputStream fos = new FileOutputStream(lockedfile);
int len;
while ((len = fis.read()) != -1) {
fos.write(len ^ 8);//进行异或,使用二进制进行计算,将数据加密
}
fos.close();
fis.close();
}
private static void key(File lockedfile, File initfile) throws IOException {
FileInputStream fis = new FileInputStream(lockedfile);
FileOutputStream fos = new FileOutputStream(initfile);
int len;
while ((len = fis.read()) != -1) {
fos.write(len ^ 8);//使用同样的数字转换成二进制数进行异或运算解开加密
}
fos.close();
fis.close();
}
}
三.修改文件中的数据
文本文件中有以下的数据:
2-1-9-4-7-8
将文件中的数据进行排序变成以下的数据:
1-2-4-7-8-9
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
public class IO {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("C:\\Users\\21566\\IdeaProjects\\untitled6\\test.txt");
StringBuilder sb = new StringBuilder();
int len;
while ((len = fr.read()) != -1) {
sb.append((char) len);
}
fr.close();
String str = sb.toString();
String[] arr = str.split("-");
ArrayList<Integer> al = new ArrayList<>();
for (String s : arr) {
int i = Integer.parseInt(s);
al.add(i);
}
Collections.sort(al);
FileWriter fw = new FileWriter("C:\\Users\\21566\\IdeaProjects\\untitled6\\test.txt");
for (int i = 0; i < al.size(); i++) {
if (i == al.size() - 1) {
fw.write((al.get(i) + ""));
} else {
fw.write((al.get(i) + "-"));
}
}
fw.close();
}
}