云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > Java的文件输入输出

Java的文件输入输出

  • 62 次阅读
  • 3 次下载
  • 2026/4/24 14:57:20

} } // 分割文件 public static void seperate(String filename, int size) throws IOException { FileInputStream fileInputStream = new FileInputStream(new File(filename)); BufferedInputStream bufInputStream = new BufferedInputStream(fileInputStream); byte[] data = new byte[1]; int count = 0; // 还原文件大小及指定分割的大小 // 决定要分割为几个文件 if(fileInputStream.available() % size == 0) count = fileInputStream.available() / size; else count = fileInputStream.available() / size + 1; // 开始进行分割 for(int i = 0; i < count; i++) { int num = 0; // 分割的文件加上下划线与编号 File file = new File(filename + \ BufferedOutputStream bufOutputStream = new BufferedOutputStream( new FileOutputStream(file)); while(bufInputStream.read(data) != -1) { bufOutputStream.write(data); num++; if(num == size) { // 分割出一个文件 bufOutputStream.flush(); bufOutputStream.close(); break; } } if(num < size) { bufOutputStream.flush(); bufOutputStream.close(); } } System.out.println(\分割为\个文件\ } // 连接文件 public static void concatenate(String filename, int number) throws IOException { // 收集文件用的List List list = new ArrayList(); for(int i = 0; i < number; i++) { // 文件名必须为下划线加上编号 File file = new File(filename + \ list.add(i, new FileInputStream(file)); } final Iterator iterator = list.iterator(); // SequenceInputStream 需要一个Enumeration对象来构建 Enumeration enumation = new Enumeration() { public boolean hasMoreElements() { return iterator.hasNext(); } public InputStream nextElement() { return iterator.next(); } }; // 建立SequenceInputStream // 并使用BufferedInputStream BufferedInputStream bufInputStream = new BufferedInputStream( new SequenceInputStream(enumation), 8192); BufferedOutputStream bufOutputStream = new BufferedOutputStream( new FileOutputStream(filename), 8192); byte[] data = new byte[1]; // 读取所有文件数据并写入目的地文件 while(bufInputStream.read(data) != -1) bufOutputStream.write(data); bufInputStream.close(); bufOutputStream.flush(); bufOutputStream.close(); System.out.println(\组合\个文件 OK!!\ } } 分割文件时必须指定-s和分割后的每个文件大小。执行的一个例子如下: java onlyfun.caterpillar.SequenceStreamDemo -s 1048576 test.zip 分割为6个文件 分割后的文件名是原文件名加上下划线与编号,例如test.zip_1、test.zip_2等。合并文件时必须要指定-c、合并的文件数与来源文件名称,例如将之前分割过后的文件合并为一个文件: java onlyfun.caterpillar.SequenceStreamDemo -c 6 test.zip 组合6个文件 OK!! 14.2.7 PrintStream 之前所介绍过的OutputStream对象,都是直接将内存中的数据原封不变地写至目的地(例如一个文件)。举个例子来说,如果将int类型1使用之前 介绍的OutputStream对象输出至文件,则文件中所存储的是int类型1在内存中的值,例如范例14.12的输出结果。

Ü 范例14.12 StreamTest.java

package onlyfun.caterpillar; import java.io.*; public class StreamTest { public static void main(String[] args) throws IOException { FileOutputStream file = new FileOutputStream( new File(\ file.write(1); file.close(); } } 执行范例14.12后会产生一个test.txt文件,打开文件之后,不会看到显示1,而可能看到一个怪异的符号。由于使用write()方法,这会将1 在内存中的值的低字节0000001写入文件中,而纯文件文件在显示文件内容时,会以操作系统的默认编码显示对应的字符。如果使用文字编辑软件(像vi或 UltraEdit)观看test.txt的十六进制表示,其结果会显示 01(十六进制表示),如图14-3所示。

图14-3 使用UltraEdit十六进制编辑模式观看范例14.12的输出文件 有时所想要存储的结果是数据转换为字符之后的结果,例如程序的执行结果是3.14159,您会希望使用3.14159等字符来存储,也就是俗称的存储为纯 文本文件。这样当使用简单的纯文字编辑器观看时,就可以直接看到以3.14159等字符显示的画面。在范例14.12中,若想使用纯文本文件看到 test.txt的显示结果是1,则必须先将内存中的整数1,也就是二进制00000000 00000000 00000000 00000001转换为对应的1字符编码,也就是0x31(十进制表示为49)并加以存储。 使用java.io.PrintStream可以自动进行字符转换的动作,默认会使用操作系统的编码来处理对应的字符转换动作。下面使用范例14.13来作示范。 Ü 范例14.13 PrintStreamDemo.java

package onlyfun.caterpillar; import java.io.*; public class PrintStreamDemo { public static void main(String[] args) throws FileNotFoundException { PrintStream printStream = new PrintStream( new FileOutputStream( new File(\ printStream.println(1); printStream.close(); } } 执行程序之后使用纯文字编辑器打开test.txt,其内容会是显示字符1了。print()或println()接受int、char、String、double等数据类型,println()会在输出之后加上换行字符,而print()则不会。 注意在文件存储上实际并没有二进制文件或是纯文本文件的区别,所有的文件所存储的都是二进制的数据,一般俗称的纯文本文件。其实正确地说,是指存储的结果是经过字符转换。例如将int类型1转换为字符1的编码结果并加以存储。 14.2.8 ByteArrayInputStream和ByteArrayOutputStream 流的来源或目的地不一定是文件,也可以是内存中的一个空间,例如一个位数组。java.io.ByteArrayInputStream、java.io.ByteArrayOutputStream即是将位数组当作流输入来源、输出目的地的类。 ByteArrayInputStream可以将一个数组当作流输入的来源,而ByteArrayOutputStream则可以将一个位数组当作流输出 的目的地。在这里举一个简单的文件位编辑程序作为例子,您可以打开一个简单的文本文件,其中有简单的A、B、C、D、E、F、G等字符,在读取文件之后, 可以直接以程序来指定文件中位的位置来修改所指定的字符。作法是将文件读入数组中,指定数组索引修改元素,然后重新将数组存回文件。范例14.14是实现 的程序内容。 Ü 范例14.14 ByteArrayStreamDemo.java

搜索更多关于: Java的文件输入输出 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

} } // 分割文件 public static void seperate(String filename, int size) throws IOException { FileInputStream fileInputStream = new FileInputStream(new File(filename)); BufferedInputStream bufInputStream = new BufferedInputStream(fileInputStream); byte[] data = new byte[1]; int coun

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com