本文学习总结自《Java开发实战经典 第2版》
打印流
主要包括字节打印流PrintStream和字符打印流PrintWriter。 主要方法
public PrintStream(File file)throws FileNotFoundException
public PrintStream(OutputStream out)
public PrintStream printf(Locale l,String format,Object...args)
public PrintStream printftString format,Object...args)
public void print(boolean b)
public void println(boolean b)
示例:
public static void main(String[] args) throws IOException {
PrintStream ps = new PrintStream(new FileOutputStream("D:\\Willow.txt"));
String name = "Willow";
int age = 18 ;
char sex = 'M';
ps.printf("姓名:%s ; 年龄.:%d ; 性别:%c",name,age,sex);
ps.close();
}
System的IO 主要有3个常量:public static final PrintStream out,public static final PrintStream err,public static final PrintStream in,分别是标准输出,错误输出,标准输入。 像常用的System.out.println()实际上调用的PrintStream的方法。
重定向方法 通过该方法改变输入流的来源或者输出流的输出位置。
public static void setOut(PrintStream out)
public static void setErr(PrintStream err)
public static void setIn(PrintStream in)
数据操作流
数据操作流,分为数据输出流DataOutputStream和数据输入流DatalnputStream , 通常数据输出流会按照一定的格式将数据输出,再通过数据输入流按照一定的格式将数据读入,方便对数据进行处理。
合并流
用于将两个文件的内容合并成一个文件。SequencelnputStream类。 主要方法
public SequenceInputStrearn(InputStream si,InputStream s2);
public int available() throws IOException
示例代码
public static void main(String[] args) throws IOException {
InputStream in1 = new FileInputStream("D:\\Willow1.txt");
InputStream in2 = new FileInputStream("D:\\Willow2.txt");
SequenceInputStream inputStream = new SequenceInputStream(in1, in2);
int len = 0;
byte[] bytes = new byte[1024];
while ((len = inputStream.read(bytes)) != -1){
System.out.print(new String(bytes,0,len,"utf-8"));
}
in1.close();
in2.close();
}
输出
压缩流
可以使用压缩流把文件或文件夹进行压缩。 想压缩成zip,需要要导入java.util.zip包。包中主要有类ZipFile、 ZipOutputStream、 ZipInputStream、 ZipEntry。 想压缩成jar,需要要导入java.util.jar包。包中主要有类JarOutputStream、 JarInputStream、 JARFile、 JAREntry。 gzip用于unix系统文件压缩,在包java.util.zip中,常用类是GZIPOutputStream和GZIPInputStream。
ZipOutputStream
public static void main(String[] args) throws IOException {
File file = new File("D:\\123");
File zipFile = new File("D:\\123.zip");
ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(zipFile));
zip.setComment("Willow");
if (file.isDirectory()){
File[] list = file.listFiles();
for (int i = 0; i< list.length; ++i){
InputStream in = new FileInputStream(list[i]);
zip.putNextEntry(new ZipEntry(file.getName()
+File.separator + list[i].getName()));
int len = 0;
while ((len = in.read()) != -1){
zip.write(len);
}
in.close();
}
}
zip.close();
}
ZipFile
public static void main(String[] args) throws IOException {
File file = new File("D:\\123_unzip.txt");
File zipFile = new File("D:\\123.zip");
ZipFile zip = new ZipFile(zipFile);
ZipEntry entry = zip.getEntry("123.txt");
InputStream in = zip.getInputStream(entry);
OutputStream out = new FileOutputStream(file);
int len = 0;
while ((len = in.read()) != -1){
out.write(len);
}
in.close();
out.close();
zip.close();
}
ZipInputStream
ipFile适用于压缩文件只存在一个ZipEntry的情况,如果存在多个文件或者文件夹时,需要结合ZipInputStream。
public static void main(String[] args) throws IOException {
File file = new File("D:\\123.zip");
ZipInputStream zip = new ZipInputStream(new FileInputStream(file));
ZipEntry entry = null;
ZipFile zipFile = new ZipFile(file);
while((entry = zip.getNextEntry()) != null){
File outFile = new File("D:" + File.separator +entry.getName());
if (!outFile.getParentFile().exists()){
outFile.getParentFile().mkdir();
}
if(!outFile.exists()){
outFile.createNewFile();
}
InputStream in = zipFile.getInputStream(entry);
OutputStream out = new FileOutputStream(outFile);
int len = 0;
while ((len = in.read()) != -1){
out.write(len);
}
in.close();
out.close();
}
zip.close();
}
回退流
在 JavaIO中所有的数据都是采用顺序的读取方式,即对于一个输入流来说,都是采用从头到尾顺序读取的。如果在输入流中某个不需要的内容被读取进来,则只能通过程序将这些不需要的内容处理掉。为了解决这样的读取问题,在 Java中提供了一种回退输入流(PushbacknputStream、PushbackReader) , 可以把读取进来的某些数据重新退回到输入流的缓冲区中。 主要方法是unread(),进行回退。
public static void main(String[] args) throws IOException {
InputStream in = new FileInputStream("D:\\Willow2.txt");
PushbackInputStream inputStream = new PushbackInputStream(in);
int len = 0;
int i = 0;
while ((len = inputStream.read()) != -1){
System.out.print((char)len);
if(((char)len) == '!' && i < 3){
inputStream.unread((char)len);
System.out.println("退回");
++i;
}
}
in.close();
}
|