java实现把一个大文件切割成N个固定大小的文件
2013-03-21 14:53
866 查看
这个好像是我一年前去面试时的一道面试题,分享一下!考 java I/O 的!
//java实现把一个大文件切割成N个固定大小的文件 package com.johnny.test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; public class FenGeFile { public static final String SUFFIX = “.txt”; // 分割后的文件名后缀 // 将指定的文件按着给定的文件的字节数进行分割文件,其中name指的是需要进行分割的文件名,size指的是指定的小文件的大小 public static String[] divide(String name, long size) throws Exception { File file = new File(name); if (!file.exists() || (!file.isFile())) { throw new Exception(“指定文件不存在!”); } // 获得被分割文件父文件,将来被分割成的小文件便存在这个目录下 File parentFile = file.getParentFile(); // 取得文件的大小 long fileLength = file.length(); System.out.println(“文件大小:”+fileLength+” 字节”); if (size <= 0) { size = fileLength / 2; } // 取得被分割后的小文件的数目 int num = (fileLength % size != 0) ? (int) (fileLength / size + 1) : (int) (fileLength / size); // 存放被分割后的小文件名 String[] fileNames = new String[num]; // 输入文件流,即被分割的文件 FileInputStream in = new FileInputStream(file); // 读输入文件流的开始和结束下标 long end = 0; int begin = 0; // 根据要分割的数目输出文件 for (int i = 0; i < num; i++) { // 对于前num – 1个小文件,大小都为指定的size File outFile = new File(parentFile, file.getName() + i + SUFFIX); // 构建小文件的输出流 FileOutputStream out = new FileOutputStream(outFile); // 将结束下标后移size end += size; end = (end > fileLength) ? fileLength : end; // 从输入流中读取字节存储到输出流中 for (; begin < end; begin++) { out.write(in.read()); } out.close(); fileNames[i] = outFile.getAbsolutePath(); } in.close(); return fileNames; } public static void readFileMessage(String fileName) {// 将分割成的小文件中的内容读出 File file = new File(fileName); BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(file)); String string = null; // 按行读取内容,直到读入null则表示读取文件结束 while ((string = reader.readLine()) != null) { System.out.println(string); } reader.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e1) { } } } } public static void main(final String[] args) throws Exception { String name = “D:/boss/123.txt”; long size = 1024*1024*4;//1K=1024b(字节) String[] fileNames = FenGeFile.divide(name, size); System.out.println(“文件” + name + “分割的结果如下:”); for (int i = 0; i < fileNames.length; i++) { System.out.println(fileNames[i] + “的内容如下:”); //FenGeFile.readFileMessage(fileNames[i]); System.out.println(); } } }
相关文章推荐
- java实现把一个大文件切割成N个固定大小的文件
- java实现把一个大文件切割成N个固定大小的文件
- java实现把一个大文件切割成N个固定大小的文件
- java实现把一个大文件切割成N个固定大小的文件
- java实现把一个大文件切割成N个固定大小的文件
- java的IO流来实现一个最简单的文件复制
- java实现文件的切割及合并
- java获得一个目录下的所有文件,和固定后缀的文件
- 用Java实现的一个本地文件浏览器
- C语言实现的计算一个文件下的所有文件的总大小(还有BUG,如果文件夹下面还有文件家就有问题,等待更新)
- 点击一个超链接,弹出固定大小的新窗口(js实现)
- 复制一个文件夹中的所有文件和文件夹的java程序实现
- java实现按照文件的大小排序文件夹下的文件
- 引用 java将图片切割成规定比例并将其压缩成固定大小
- 点击一个超链接,弹出固定大小的新窗口(js实现)
- 用Java实现的一个本地文件浏览器
- java使用compareTo实现一个类的对象之间比较大小
- java获得一个目录下的所有文件,和固定后缀的文件
- 如何把一个文件压缩成几个固定大小的文件及解压缩
- 【Java】Swing+IO流实现一个简单的文件加密程序(较完整版)