黑马程序员技术交流社区

标题: 刚刚写了一个好玩的程序 给大家分享 [打印本页]

作者: ysdolls    时间: 2014-8-7 19:06
标题: 刚刚写了一个好玩的程序 给大家分享
刚刚写了一个好玩的程序 给大家分享
这个是用来 隐藏文件的,把自己收藏的电影编程图片。不过这个图片和电影一样大,相信以前大家可能接触过这个功能 两个方法 一个隐藏 一个分解  隐藏后的大图片也是可以打开的,不过打开不是电影 而是图片
废话不多说 上代码,大家拿过去可能需要修改一下,包名 和操作的文件路径
  1. package com.ys;

  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.SequenceInputStream;
  6. import java.util.ArrayList;
  7. import java.util.Enumeration;
  8. import java.util.Iterator;

  9. public class heldFile {
  10.        
  11. //隐藏文件到图片
  12.         public static void inputMyFile(File file1,File file2,File file3) throws Exception{
  13.                 ArrayList<FileInputStream>  al = new ArrayList<FileInputStream>();
  14.                 al.add(new FileInputStream(file1));
  15.                 al.add(new FileInputStream(file2));
  16.                 final Iterator<FileInputStream> it = al.iterator();
  17.                 Enumeration<FileInputStream> en = new Enumeration<FileInputStream>()
  18.                 {
  19.                         public boolean hasMoreElements()
  20.                         {
  21.                                 return it.hasNext();
  22.                         }
  23.                         public FileInputStream nextElement()
  24.                         {
  25.                                 return it.next();
  26.                         }
  27.                 };

  28.                 SequenceInputStream sis = new SequenceInputStream(en);

  29. //x为输出文件的绝对路径如:d:/haha/a.jpg
  30.                 FileOutputStream fos = new FileOutputStream(file3);

  31.                 byte[] buf = new byte[1024];

  32.                 int len = 0;

  33.                 while((len=sis.read(buf))!=-1)
  34.                 {
  35.                         fos.write(buf,0,len);
  36.                 }

  37.                 fos.close();
  38.                 sis.close();
  39.         }
  40.         public static void splitFile(File file1,File file2) throws Exception{
  41.                 FileInputStream fis =  new FileInputStream(file1);

  42.                 FileOutputStream fos = new FileOutputStream(file2);


  43.                 byte[] buf = new byte[290239];

  44.                 int len = 0;
  45.                 int count = 1;
  46.                 while((len=fis.read(buf))!=-1)
  47.                 {
  48.                         if(count==1){
  49.                                 count++;
  50.                                 continue;
  51.                         }else{
  52.                         fos.write(buf,0,len);
  53.                         fos.flush();
  54.                         }
  55.                 }
  56.                
  57.                 fos.close();
  58.                 fis.close();
  59.                
  60.         }
  61.                
  62.         public static void main(String[] args) throws Exception {
  63.                 File file1 = new File("/users/sakura/desktop/3.jpg");//路径为图片文件绝对路径
  64.                 File file2 = new File("/users/sakura/desktop/sys.txt");//要隐藏的文件路径
  65.                 File file3 = new File("/users/sakura/desktop/ImNewJpg.jpg");//隐藏时生成的新图片文件绝对路径
  66.                 File file4 = new File("/users/sakura/desktop/1.txt");//分解时生成的被隐藏文件的绝对路径
  67.                 //下面两个方法按不同需求选择调用。
  68.                 inputMyFile(file1,file2,file3);//隐藏文件方法调用,若分解文件则注释掉
  69. //                splitFile(file3,file4);//分解文件方法,若隐藏文件则注释掉
  70.                
  71.         }
  72. }
复制代码

作者: sunny~    时间: 2014-8-7 20:18
好:D我试试
作者: Joemi    时间: 2014-8-7 20:25
学习了,感谢楼主分享
作者: lspooooo    时间: 2014-8-7 20:26
学习一下
作者: 继续悲伤    时间: 2014-8-7 20:32
来观摩了一下!
作者: sydeay    时间: 2014-8-8 00:10
好,借鉴一下试试~
作者: 日光加蓝    时间: 2014-8-8 00:19
看看~~~~~~~~~~
作者: hzl_0911    时间: 2014-8-8 00:35
楼主很牛
作者: liang926    时间: 2014-8-8 00:37
学习,学习谢谢分享!
作者: inception    时间: 2014-8-8 00:39
学习一下,,,,,
作者: ysdolls    时间: 2014-8-8 08:57
54行数组应该是第一个图片的大小。
作者: 王景琛    时间: 2014-8-8 09:01
{:3_46:}{:3_53:}
作者: 明2012    时间: 2014-8-8 09:34
楼主很强呀
作者: 如果有梦    时间: 2014-8-8 09:42
楼主强悍
作者: ┣┫流枫    时间: 2014-8-8 09:46
不觉明厉    学习一下
作者: 大成哥    时间: 2014-8-8 09:49
试试~貌似不错
作者: Caincxy    时间: 2014-8-8 09:50
学习了.........
作者: Justfeeling    时间: 2014-8-8 10:21
借鉴一下  
作者: 王景琛    时间: 2014-8-8 10:38
类名首字母麻烦请大写!
  1. final Iterator<FileInputStream> it = al.iterator();
  2.                 Enumeration<FileInputStream> en = new Enumeration<FileInputStream>()
  3.                 {
  4.                         public boolean hasMoreElements()
  5.                         {
  6.                                 return it.hasNext();
  7.                         }
  8.                         public FileInputStream nextElement()
  9.                         {
  10.                                 return it.next();
  11.                         }
  12.                 };
复制代码

这段可以写成:
  1. Enumeration<FileInputStream> en = Collections.enumeration(al);
复制代码

作者: 张涛的狂怒    时间: 2014-8-8 10:44
支持一个
作者: libo1989329    时间: 2014-8-8 12:03
有点蒙圈
作者: 渴望学习    时间: 2014-8-8 13:33
路过~~~~~
作者: ysdolls    时间: 2014-8-8 13:39
王景琛 发表于 2014-8-8 10:38
类名首字母麻烦请大写!

这段可以写成:

恩  其实功能部分就是copy老毕的,我只是照着写了一遍,用Arraylist据说效率高。不是吗?
类名问题 以后会注意 谢谢了
作者: 幺零夭夭    时间: 2014-8-8 14:06
哎呀呀!试试看哈
作者: jeromechen    时间: 2014-8-8 14:36
不错,学以致用
作者: ysdolls    时间: 2014-8-8 20:24
其实 如果用cmd命令可以很简单的完成。步骤如下
首先,要有一个图片,如:1.jpg,然后把你要隐藏的文件,打包成rar

这里是2.rar

然后

到cmd ,用如下命令:
copy /b 1.jpg+2.rar 3.jpg

这里3.jpg我们要的结果,里面藏着我们的2.rar






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2