A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王德升 中级黑马   /  2012-7-9 21:45  /  1481 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王德升 于 2012-7-11 16:25 编辑

一:
import java.io.*;

class FileDemo
{
        public static void main(String[] args)
        {
                File f = new File("d:\\java0420");

                method_1(f);
        }

        public static void method_1(File dir)
        {
                File[] files = dir.listFiles();

                for(File f : files)
                {
                        System.out.println(files[f]);//这里报错,怎么定义角标阿,为什么会报错呢?
                }
        }
}


二:

import java.io.*;
import java.util.*;

class SplitFile
{
        public static void main(String[] args) throws IOException
        {
                merge();
        }


        public static void merge()throws IOException
        {
                ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();

                for(int x=1; x<=3; x++)
                {
                        al.add(new FileInputStream("c:\\splitfiles\\"+x+".part"));
                }

                final Iterator<FileInputStream> it = al.iterator();//这里为什么用迭代啊,还加个final???

                Enumeration<FileInputStream> en = new Enumeration<FileInputStream>()//为什么要用Vector里面的Enumeration??
                {
                        public boolean hasMoreElements()
                        {
                                return it.hasNext();
                        }
                        public FileInputStream nextElement()
                        {
                                return it.next();
                        }
                };

                SequenceInputStream sis = new SequenceInputStream(en);


                FileOutputStream fos = new FileOutputStream("c:\\splitfiles\\0.bmp");

                byte[] buf = new byte[1024];

                int len = 0;

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

                fos.close();
                sis.close();
        }

        public static void splitFile()throws IOException
        {
                FileInputStream fis =  new FileInputStream("c:\\1.bmp");

                FileOutputStream fos = null;//为什么在这里建立个引用呢?


                byte[] buf = new byte[1024*1024];

                int len = 0;
                int count = 1;
                while((len=fis.read(buf))!=-1)
                {
                        fos = new FileOutputStream("c:\\splitfiles\\"+(count++)+".part");
                        fos.write(buf,0,len);
                        fos.close();
                }
               
                fis.close();
               
        }
}

3 个回复

倒序浏览
一:
  for(File f : files)
                {
                        System.out.println(files[f]);//这里报错,怎么定义角标阿,为什么会报错呢?
                }

这是一个 增强for 循环 意思是对应于 每一个 files 中的元素 f 一一操作, 具体看视频  或者百度下
System.out.println(f)  这里直接打 f 就可以了
回复 使用道具 举报
  1. import java.io.*;

  2. class FileDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 File f = new File("d:\\java0420");

  7.                 method_1(f);
  8.         }

  9.         public static void method_1(File dir)
  10.         {
  11.                 File[] files = dir.listFiles();

  12.                 for(File f : files)
  13.                 {
  14.                         System.out.println(files[f]);//这里报错,怎么定义角标阿,为什么会报错呢?
  15.                 //这里你的f是一个文件,这里直接打印f就可以了,他就会自动调用f.toString()方法。
  16.                 }
  17.         }
  18. }
复制代码
  1. import java.io.*;
  2. import java.util.*;

  3. class SplitFile
  4. {
  5.         public static void main(String[] args) throws IOException
  6.         {
  7.                 merge();
  8.         }


  9.         public static void merge()throws IOException
  10.         {
  11.                 ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();

  12.                 for(int x=1; x<=3; x++)
  13.                 {
  14.                         al.add(new FileInputStream("c:\\splitfiles\\"+x+".part"));
  15.                 }

  16.                 final Iterator<FileInputStream> it = al.iterator();//这里为什么用迭代啊,还加个final???
  17.              // 这里的it要在匿名内部类中访问,所以要加final.
  18.                 Enumeration<FileInputStream> en = new Enumeration<FileInputStream>()//为什么要用Vector里面的Enumeration??
  19.                  //Vector比较低效,因为他是同步的。所以效率比较低。
  20.                 {
  21.                         public boolean hasMoreElements()
  22.                         {
  23.                                 return it.hasNext();
  24.                         }
  25.                         public FileInputStream nextElement()
  26.                         {
  27.                                 return it.next();
  28.                         }
  29.                 };

  30.                 SequenceInputStream sis = new SequenceInputStream(en);


  31.                 FileOutputStream fos = new FileOutputStream("c:\\splitfiles\\0.bmp");

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

  33.                 int len = 0;

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

  38.                 fos.close();
  39.                 sis.close();
  40.         }

  41.         public static void splitFile()throws IOException
  42.         {
  43.                 FileInputStream fis =  new FileInputStream("c:\\1.bmp");

  44.                 FileOutputStream fos = null;//为什么在这里建立个引用呢?
  45. //这个我觉得没有引用也可以吧。你可以取消一下看看是否有报错。

  46.                 byte[] buf = new byte[1024*1024];

  47.                 int len = 0;
  48.                 int count = 1;
  49.                 while((len=fis.read(buf))!=-1)
  50.                 {
  51.                         fos = new FileOutputStream("c:\\splitfiles\\"+(count++)+".part");
  52.                         fos.write(buf,0,len);
  53.                         fos.close();
  54.                 }
  55.                
  56.                 fis.close();
  57.                
  58.         }
  59. }
复制代码
回复 使用道具 举报
System.out.println(files[f]);//这里报错,怎么定义角标阿,为什么会报错呢?
//增强for循环操作的时候只能对 :前的变量进行操作,也就是只能对f进行各种操作,你那个格式是错误的,你可以直接输出f

final Iterator<FileInputStream> it = al.iterator();//这里为什么用迭代啊,还加个final???
//用迭代是为了获取集合al中的元素,加final是因为在下面 Enumeration的匿名内部类中只能访问用final修饰的局部成员

Enumeration<FileInputStream> en = new Enumeration<FileInputStream>()//为什么要用Vector里面的Enumeration??
//这里用Enumeration是因为SequenceInputStream 中传入的参数只能是Enumeration类型,而Enumeration只有Vector集合中有

FileOutputStream fos = null;//为什么在这里建立个引用呢?
//这里可以取消,但是取消后下面while循环中的fos前加上FileOutputStream
//即变成如下的样子
while((len=fis.read(buf))!=-1)
{
            FileOutputStream  fos = new FileOutputStream("c:\\splitfiles\\"+(count++)+".part");
            fos.write(buf,0,len);
            fos.close();
}

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马