java文件课后动手动脑

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

 

posted @ 2018-11-19 21:32  Abandoned_Software  阅读(215)  评论(0编辑  收藏  举报