java IO实战

可将数据进行追加文本末尾

  • BufferedWriter
    1
    2
    3
    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(  
    new FileOutputStream(file, true)));
    out.write(conent);

对第二参数为true为追加模式

  • FileWriter

    1
    2
    3
    FileWriter writer = new FileWriter(fileName, true);  
    writer.write(content);
    writer.close();
  • RandomAccessFile 任意访问文件流。

    1
    2
    3
    4
    5
    6
    7
    RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");  
    // 文件长度,字节数
    long fileLength = randomFile.length();
    // 将写文件指针移到文件尾。
    randomFile.seek(fileLength);
    randomFile.writeBytes(content);
    randomFile.close();

指定编码的读取和写入数据的几种方式:

使用NIO的时候

使用NIO的时候,很简单直接使用Charset进行创建解码器进行解码

1
2
3
4
5
6
7
// 使用utf8编码创建解码器
Charset charset = Charset.forName("utf-8");
// 创建解码器
CharsetDecoder decoder = charset.newDecoder();
// 使用解码器将byteBuffer转成charBuffer
CharBuffer charBuffer = decoder.decode(byteBuffer);
String str = String.valueOf(charBuffer);

使用OutputStreamWriter或者InputStreamReader的构造函数进行指定编码

1
2
3
4
5
6
7
String encoding = "utf-8";

BufferedReader reader = new BufferedReader(new InputStreamReader(
new FileInputStream(file), encoding));

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(file), encoding));

文件压缩 ZipOutputStream类

一次压缩多个文件(结合)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
* 一次性压缩多个文件
* */

public class ZipOutputStreamDemo2{
public static void main(String[] args) throws IOException{
// 要被压缩的文件夹
File file = new File("d:" + File.separator + "temp");
File zipFile = new File("d:" + File.separator + "zipFile.zip");
InputStream input = null;
ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(
zipFile));
zipOut.setComment("hello");
if(file.isDirectory()){
File[] files = file.listFiles();
for(int i = 0; i < files.length; ++i){
input = new FileInputStream(files[i]);
zipOut.putNextEntry(new ZipEntry(file.getName()
+ File.separator + files[i].getName()));
int temp = 0;
while((temp = input.read()) != -1){
zipOut.write(temp);
}
input.close();
}
}
zipOut.close();
}
}

注意:

1
zipOut.putNextEntry(new ZipEntry(file.getName()+ File.separator + files[i].getName()));

进行加入多个文件的操作。

对应的解压的时候,需要结合ZipFile进行操作。
详细查看:## java中的IO整理(中)

资料

java中的IO整理(上)
java中的IO整理(下)