package 第九周作业1;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO 自动生成的方法存根
getFileSize01(new File("E:\\第九周\\src\\作业2\\dada1.txt"));
try {
getFileSize02(new File("E:\\第九周\\src\\作业2\\dada1.txt"));
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
try {
getFileSize03(new File("E:\\第九周\\src\\作业2\\dada1.txt"));
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
/* 获取文件大小的方法01:
* 通过文件的length() 方法获取文件大小,这个通常可以应用于本地文件的大小计算
*/
private static long getFileSize01(File file) {
System.out.println(file.length());
return file.length();
}
@SuppressWarnings("unused")
/*
* 获取文件大小的方法02:
* 通过FileChannel类来获取文件大小,这个方法通常结合输入流相关,
* 因此可以用于文件网络传输时实时计算文件大小;
*/
private static long getFileSize02(File file) throws IOException {
FileInputStream fis = new FileInputStream(file);
FileChannel fc = fis.getChannel();
System.out.println(fc.size());
return fc.size();
}
@SuppressWarnings("unused")
/*获取文件大小的方法03:
* FileInputStream的available()方法看可以用于小文件的文件大小计算,
* 因为available()的返回值类型为int型,可能会存在溢出的情况,
* 所以 available()方法计算文件大小不建议使用;
*/
private static int getFileSize03(File file) throws IOException {
FileInputStream fis = new FileInputStream(file);
System.out.println(fis.available());
return fis.available();
}
}
第一个输出文件大小,三种方法学习了一下。引自https://blog.csdn.net/u014143369/article/details/53164791
文件夹大小操作(2018/11/20/22:30加):
import java.io.File;
public class Wenjian {
/**
* 计算文件夹大小
* @param wenjian_Size
*
*/
public void wenjian_Size(File a)
{
long sum=0;
File[] files = a.listFiles();
for(int i=0;i<files.length;i++)
{
sum=sum+getFileSize01(files[i]);
}
System.out.println("size: "+sum);
}
/**
* 计算文件大小
* @param file
* @return
*/
@SuppressWarnings("unused")
private long getFileSize01(File file) {
return file.length();
}
}
package DaDa_Wenjian;
import java.io.File;
import java.io.IOException;
public class dada {
public static void main(String[] args) throws IOException {
// TODO 自动生成的方法存根
/* File f1 = new File("E:\\Dada's function library\\src\\DaDa_Wenjian\\dada1.txt");
if(!f1.exists()) {
f1.createNewFile();//如果没有创建一个
}
File f2 = new File("E:\\Dada's function library\\src\\DaDa_Wenjian\\dada2.txt");
if(!f2.exists()) {
f2.createNewFile();//如果没有创建一个
}
F1_F2_copy a= new F1_F2_copy();
a.F1_F2(f1, f2);
*/
File f1 = new File("E:\\Dada's function library\\src\\DaDa_Wenjian");
Wenjian a= new Wenjian();
a.wenjian_Size(f1);
}
}
第二个实验:加密文件内容
package 第九周作业1;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
//编写一个文件加解密程序,通过命令行完成加解密工作
public class Main1 {
private static final int numOfEncAndDec=0x99;//加密解密密钥
private static int dataOfFile=0;//文件字节内容
public static void main(String[] args) {
File srcFile=new File("E:\\第九周\\src\\第九周作业1\\dada1.txt");//初始化文件
File encFile=new File("E:\\第九周\\src\\第九周作业1\\dada2.txt"); //加密文件
File decFile=new File("E:\\第九周\\src\\第九周作业1\\dada3.txt"); //解密文件
try {
//EncFile(srcFile,encFile); //加密操作
//DecFile(encFile,decFile);//解密操作
EncFile(srcFile,decFile); //加密操作
DecFile(decFile,encFile);
}catch(Exception e) {
e.printStackTrace();
}
}
private static void EncFile(File srcFile,File encFile)throws Exception{
if(!srcFile.exists()) {
System.out.println("source file not exixt");
}
if(!encFile.exists()) {
System.out.println("encrypt file created");
encFile.createNewFile();//若无加密文件,新建一个加密文件
}
InputStream fis=new FileInputStream(srcFile);
OutputStream fos=new FileOutputStream(encFile);
while((dataOfFile=fis.read())>-1) {//当读到文件内容时
fos.write(dataOfFile^numOfEncAndDec);//将读出的内容加密后写入
}
fis.close();
fos.flush();
fos.close();
}
private static void DecFile(File encFile,File decFile)throws Exception{
if(!encFile.exists()) {
System.out.println("encrypt file not exixt");
}
if(!decFile.exists()) {
System.out.println("decrypt file created");
decFile.createNewFile();
}
InputStream fis=new FileInputStream(encFile);
OutputStream fos=new FileOutputStream(decFile);
while((dataOfFile=fis.read())>-1) {
fos.write(dataOfFile^numOfEncAndDec);
}
fis.close();
fos.flush();
fos.close();
}
}
来源于网络,但是我有另一种方法就是数据与^的操作:
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Scanner;
public class Main2 {
public static void main(String[] args) {
F1_F2(new File("E:\\第九周\\src\\第九周作业1\\1.txt"), new File("E:\\第九周\\src\\第九周作业1\\2.txt"));
}
public static void F1_F2(File f1,File f2)
{
try
{
//写入f2
FileWriter fw=new FileWriter(f2,false);
PrintWriter pw=new PrintWriter(fw);
//阅读f1
Scanner shuru = new Scanner(new BufferedReader(new FileReader(f1)));
while(shuru.hasNext())
{
int i = Integer.valueOf(shuru.next()).intValue();
pw.println((char)(i^20000));//插入行号
}
pw.flush();
pw.close();
fw.close();
}
catch(Exception e)
{
System.out.println("错误");
}
}
}
把数字变成文字
第三个实验:
感觉超出我的想象,理解不了,但是还是源码奉上
三、编写一个文件分割工具,能把一个大文件分割成多个小的文件
package 文件分割工具;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class CutFile {
public static void main(String[] args) {
//调用cutFile()函数 传人参数分别为 (原大文件,切割后存放的小文件的路径,切割规定的内存大小)
cutFile("F:\\测试加密.txt", "F:",10 * 10 * 20);
}
private static void cutFile(String src, String endsrc, int num) {
FileInputStream fis = null;
File file = null;
try {
fis = new FileInputStream(src);
file = new File(src);
//创建规定大小的byte数组
byte[] b = new byte[num];
int len = 0;
//name为以后的小文件命名做准备
int name = 1;
//遍历将大文件读入byte数组中,当byte数组读满后写入对应的小文件中
while ((len = fis.read(b)) != -1) {
//分别找到原大文件的文件名和文件类型,为下面的小文件命名做准备
String name2 = file.getName();
int lastIndexOf = name2.lastIndexOf(".");
String substring = name2.substring(0, lastIndexOf);
String substring2 = name2.substring(lastIndexOf, name2.length());
FileOutputStream fos = new FileOutputStream(endsrc + "\\\\"+ substring + "-" + name + substring2);
//将byte数组写入对应的小文件中
fos.write(b, 0, len);
//结束资源
fos.close();
name++;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
//结束资源
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
虽然没有看懂,但是我会尽快理解byte的,来理解这个操作。
感觉文件操作不明白byte