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
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