当前位置:首页 > Java的文件输入输出
} } // 分割文件 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
Ü 范例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
共分享92篇相关文档