毕向东_Java基础视频教程第20天_IO流(15~17)

时间:2023-02-11 12:45:29

第20天-15-IO流(打印输出流)

打印输出流:PrintWriter与PrintStream

两者的区别:Since JDK 1.4 it's possible to specify the character encoding for a PrintStream. Thus, the differences between PrintStream and PrintWriter are only about auto flushing behavior and that a PrintStream cannot wrap a Writer.

package bxd;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

/*
打印输出流: 该流提供了打印方法, 可以将各种类型的数据都原样打印

PrintStream构造函数可以接受的参数类型:
1. File对象 File
2. 字符串路径 String
3. 字节输出流 OutputStream

PrintWriter构造函数可以接受的参数类型(由于可接受的参数类型更多, 因而更常用一些):
1. File对象 File
2. 字符串路径 String
3. 字节输出流 OutputStream
4. 字符输出流 Writer
*/
public class PrintStreamDemo {
public static void main(String[] args) throws IOException {

BufferedReader bufr
= new BufferedReader(new InputStreamReader(System.in));
PrintWriter out
= new PrintWriter(System.out, true);

String line
= null;
while ((line = bufr.readLine()) != null) {
if ("over".equals(line)) break;
out.println(line.toUpperCase());
}
out.close();
bufr.close();
}
}

第20天-16-IO流(合并流-SequenceInputStream)

package bxd;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.Enumeration;
import java.util.Vector;

public class SequenceDemo {

public static void main(String[] args) throws IOException {

Vector
<FileInputStream> v = new Vector<FileInputStream>();
v.add(
new FileInputStream("info.txt"));
v.add(
new FileInputStream("list.txt"));
Enumeration
<FileInputStream> en = v.elements();

SequenceInputStream sis
= new SequenceInputStream(en);
FileOutputStream fos
= new FileOutputStream("uni.txt");

byte[] buf = new byte[1024];
int len = 0;
while ((len = sis.read(buf)) != -1) {
fos.write(buf,
0, len);
}

fos.close();
sis.close();
}
}

第20天-17-IO流(切割文件)

package bxd;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;

public class SplitFile {
public static void splitFile() throws IOException {
FileInputStream fis
= new FileInputStream("ts.png");
FileOutputStream fos
= null;

byte[] bytes = new byte[600 * 1024];
int len = 0;
int count = 1;
while ((len = fis.read(bytes)) != -1) {
fos
= new FileOutputStream((count++) + ".part");
fos.write(bytes,
0, len);
fos.close();
}
fis.close();
}

public static void merge() throws IOException {

ArrayList
<FileInputStream> al = new ArrayList<FileInputStream>();
for (int x = 1; x <= 4; x++) al.add(new FileInputStream(x + ".part"));

final Iterator<FileInputStream> it = al.iterator();
Enumeration
<FileInputStream> en = new Enumeration<FileInputStream>() {
@Override
public boolean hasMoreElements() {
return it.hasNext();
}

@Override
public FileInputStream nextElement() {
return it.next();
}
};

SequenceInputStream sis
= new SequenceInputStream(en);
FileOutputStream fos
= new FileOutputStream("rets.png");

byte[] bytes = new byte[1024];
int len = 0;
while ((len = sis.read(bytes)) != -1) fos.write(bytes, 0, len);

fos.close();
sis.close();
}

public static void main(String[] args) throws IOException {
merge();
}
}