欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

java实现把一个大文件切割成N个固定大小的文件

发布时间:2025/7/14 编程问答 59 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java实现把一个大文件切割成N个固定大小的文件 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

这个好像是我一年前去面试时的一道面试题,分享一下!考 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(); 
  •                 } 
  •         } 
  •  

     

    转载于:https://blog.51cto.com/johnny84/1159616

    总结

    以上是生活随笔为你收集整理的java实现把一个大文件切割成N个固定大小的文件的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。