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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

      写了个将文本文件分割成若干个等大小的小文件的程序,使用了FileStream类进行处理,每个小文件都是100K。程序基本可以实现。
   详情请看:http://blog.csdn.net/zly229190/article/details/7047151
   但有个问题:由于文件分割的时候,有可能会将原文件中的某行分割开,分别存到相邻的两个文件中。我不希望一个独立的行被分割成两行,分别存在不同的文件中。不知道该如何处理。我初步想想到的方法是用File类替代FileStream类处理文件。但由于File类只能一行一行处理数据,可能效率不高。不知道还有没有其他的处理方法??

评分

参与人数 1技术分 +2 收起 理由
李荣壮 + 2

查看全部评分

1 个回复

倒序浏览
import java.io.*;
import java.util.*;

class Spiltfiledemo
{
        public static void main(String[] args) throws IOException
        {
                //spiltfile();
                merge();
        }
        //用合并流合并数据
        public static void merge() throws IOException
        {
                ArrayList<FileInputStream> al=new ArrayList<FileInputStream>();
                for (int x=1;x<=3 ;x++ )
                {
                        al.add(new FileInputStream("d:\\spilt\\"+x+".part"));//将所有切割的碎片添加到数组中
                }
                final Iterator<FileInputStream> it=al.iterator();
                Enumeration<FileInputStream> en=new Enumeration<FileInputStream>()
                {
                                public boolean hasMoreElements()
                            {
                                        return it.hasNext();//判断是否还有下一个元素                               
                                }
                                public FileInputStream nextElement()
                            {                               
                                return it.next();//如歌还有这放回下一个元素
                                }
                };
                SequenceInputStream sis=new SequenceInputStream(en);//读取所有集合中的文件,
                FileOutputStream fos=new FileOutputStream("d:\\spilt\\1.bmp");//目的文件
                byte[] b=new byte[1024*10];
                int len=0;
                while ((len=sis.read(b))!=-1)
                {
                        fos.write(b,0,len);                       
                }
                fos.close();
                sis.close();
               
       
        }
        public static void spiltfile()throws IOException
        {
                FileInputStream fis=new FileInputStream("d:\\2.jpg");
                FileOutputStream fos=null;
                byte[] b=new byte[1024*300];//第一个字节缓冲区
                int len=0;
                int count=1;
                while ((len=fis.read(b))!=-1)//将数据读取到byte中
                {
                        fos=new FileOutputStream("d:\\spilt\\"+(count++)+".part");//将切割的碎片出入到spilt文件中       
                        fos.write(b,0,len);
                        fos.close();
                }
                fis.close();


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