zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    在Win10的注册表编辑器中如何快速跳转到相关键值?
    使用winsw给Win10添加服务
    巧把任意程序添加到Win10控制面板(添加“系统配置”为例)
    在Win8.1开始屏幕添加电源按钮
    win10中,如何隐藏此电脑中的6个文件夹?
    Win10恢复这台电脑里的6个文件夹
    解决Office 2010安装报错1907,没有足够权限注册字体。
    C#面向对象(OOP)入门—第二天—多态和继承(继承)
    C#面向对象(OOP)入门—第一天—多态和继承(方法重载)
    OpenCV与Python之图像的读入与显示以及利用Numpy的图像转换
  • 原文地址:https://www.cnblogs.com/gonT-iL-evoL-I/p/9985877.html
Copyright © 2011-2022 走看看