⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fileencrypt.java

📁 基础性的JAVA源代码
💻 JAVA
字号:
package exec.day1016;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
/**
 * 文件加密器 
 * @author new
 *
 */
public class FileEncrypt {
	public static void main(String[] args) {
		new FileEncryptFrame().init();
	}

}
class FileEncryptFrame extends JFrame{
	   JPanel jp1;
	   JPanel jp2;
	   JLabel jlb1;
	   JLabel jlb2;
	   JFileChooser jfc;//文件选择器
	   JCheckBox jcb;//复选框
	   JTextField jtf;
	   JButton jb1;
	   JButton jb2;
	   public FileEncryptFrame(){
		   super("文件加密/解密器  v1.0");
		   jp1=new JPanel();
		   jp2=new JPanel();
		   jlb1=new JLabel("选择要加密/解密的文件:");
		   jlb2=new JLabel("选择加密/解密算子(0-255):");
		   jfc=new JFileChooser();
		   jtf=new JTextField(10);
		   jcb=new JCheckBox("覆盖原文件");
		   jb1=new JButton("加密/解密");
		   jb2=new JButton("取消");
	   }
	   public void init(){	   
		 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
	     getContentPane().setLayout(new BorderLayout());
	     getContentPane().add(jp1,BorderLayout.CENTER);
	     getContentPane().add(jp2,BorderLayout.SOUTH);
	     
	     jp1.setAlignmentX(JPanel.LEFT_ALIGNMENT);
	     jp1.setLayout(new FlowLayout(FlowLayout.LEFT));
         //不显示文件选择器的按钮
	     jfc.setControlButtonsAreShown(false);
	     jp1.add(jlb1);
	     jp1.add(jfc);
	     jp1.add(jlb2);
	     jp1.add(jtf);
	     jp1.add(jcb);
	   
	     jp2.add(jb1);
	     jp2.add(jb2);
	     
	     setVisible(true);
	     setSize(520,480);
	     this.setResizable(false);
	     //事件处理方法
	     setEvent();
	   }
	   public void setEvent(){
		   this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		   //按钮加密/解密,添加事件处理
		   jb1.addActionListener(new ActionListener(){
		    	public void actionPerformed(ActionEvent e){
		    		//获取所选取的用来加密和解密的文件对象
		    		 File f=jfc.getSelectedFile();
		    		 if(f==null){
		    			 JOptionPane.showMessageDialog(null,"请选择要加密或解密的文件!");
		    			 return;
		    		 }
		    		 //获取加密/解密算子
		    		 String tf = jtf.getText();
		    		 if(tf==null || tf.length()<=0){
		    			 JOptionPane.showMessageDialog(null,"请输入加密/解密算子!");
		    			 return;
		    		 }
		    		 int code=Integer.parseInt(tf);
		    		 //传递相应的信息给Encrypter,进行加密
		    		 new Encrypter(code,f,jcb.isSelected()).encode();
		    		 final JDialog jd=new JDialog(FileEncryptFrame.this,"加密成功!");
		    		 jd.add(new JLabel("文件加密成功!"),BorderLayout.NORTH);
		    		 JButton jbok;
		    		 jd.add(jbok=new JButton("确定"),BorderLayout.SOUTH);
		    		 jbok.addActionListener(new ActionListener(){
		    			 public void actionPerformed(ActionEvent e){
		    				 jd.dispose();
		    			 }
		    		 });
		    		 jd.setLocationRelativeTo(FileEncryptFrame.this);
		    		 jd.setSize(300,200);
		    		 jd.setVisible(true);
		    	}
		    });
		    //按钮取消的事件处理
		   jb2.addActionListener(new ActionListener(){
		      public void actionPerformed(ActionEvent e){
				  System.exit(0);}
		   });
	   } 
}

class Encrypter{
	//加密/解密算子
	int code;
	//是否覆盖原文件
	boolean rewrite;
	//原文件(要被加密/解密的文件)对象
	File sourceFile;
	//文件输入流
    FileInputStream fin;
    //文件输出流
	FileOutputStream fout;
	//原文件名
	String sourceFileName;
	//目标文件名
	String objFileName;
	
	public Encrypter(int code,File file,boolean rewrite){   
		this.code=code; 
		sourceFile=file;
		this.rewrite=rewrite;
		//获取原文件的名字
		sourceFileName=sourceFile.getAbsolutePath();
		//获取.在原文件名字符串中最后一次出现的位置
		int indexOfDot=sourceFileName.lastIndexOf('.');
		//如果原文件名不包含后缀名
		if(indexOfDot==-1){
			//设置目标文件名的后缀名为.sec
			objFileName=sourceFileName+".sec";
			
		}
		//如果原文件名包含扩展名(后缀名)
		else {
			//获取原文件名的扩展名
			String postfixName=sourceFileName.substring(indexOfDot);
			//如果原文件的扩展名是.sec
			if(postfixName.equals(".sec")){
				//设置目标文件名,为原文件名称去掉后缀名的部分
				objFileName=sourceFileName.substring(0,indexOfDot);
			}
			//如果原文件的扩展名不是.sec
			else{
				//设置目标文件名,为原文件名加上“.sec”
				objFileName=sourceFileName+".sec";
			}
		}
	}
	public void encode(){
        //覆盖原文件
		if(rewrite){
			RandomAccessFile fra=null;
			try {
				fra=new RandomAccessFile(sourceFile,"rw");
				int temp;
				while((temp=fra.read())!=-1){
					fra.seek(fra.getFilePointer()-1);
					fra.write(temp^code);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
				if(fra!=null)try{fra.close();}catch(IOException e){}
			}
		}
        //不覆盖原文件
		else{
			FileInputStream fis=null;
			FileOutputStream fos=null;
			try {
				fis=new FileInputStream(sourceFile);	
				fos=new FileOutputStream(objFileName);
				while(fis.available()>0){
					fos.write(fis.read()^code);
				}
				fos.flush();
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
				if(fis!=null)try{fis.close();}catch(IOException e){}
				if(fos!=null)try{fos.close();}catch(IOException e){}
			}
		}

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -