import java.io.*;
import java.util.LinkedList;
public class BufferinputFile {
public static String read(String filename) throws IOException {
//缓冲流读取字符串
BufferedReader in = new BufferedReader(new FileReader(filename));
String s;
LinkedList<String> linkedList = new LinkedList<>();
StringBuilder sb = new StringBuilder();
while((s = in.readLine())!=null)
//sb.append(s + "\n");
linkedList.addFirst(s.toUpperCase());
in.close();
for(String tp:linkedList){
System.out.println(tp);
//tp.indexOf(" ");字符串包含另一个字符串
}
return linkedList.toString();
}
public static void main(String... args) throws IOException{
// //缓冲流
// read("src/com/FileTest/BufferinputFile.java");
// System.out.println("--");
// //StringReader 将字符串转换成流
// StringReader stringReader = new StringReader("hello world");
// int c;
// while((c=stringReader.read())!=-1)
// System.out.print((char)c);
//读取格式化数据 DataInputStream
DataInputStream dataInputStream = new DataInputStream(System.in);
System.out.println(dataInputStream.readByte());
dataInputStream.close();
}
}
注意绝对路径和相对路径
相对路径从该项目开始 src/com/company/xxx.txt;
import java.io.*;
import java.util.Scanner;
public class BasicFileOutput {
public static void main (String...args)throws IOException {
String filename = "src/sww1.txt";
//BufferedReader in = new BufferedReader()
PrintWriter out = new PrintWriter(
new BufferedWriter(new FileWriter(filename))
);
//自动?!
//PrintWriter out1 = new PrintWriter(filename);
int lineCount = 1;
String s;
Scanner in = new Scanner(System.in);
while(in.hasNext()){
if(!(s=in.next()).equals("exit"))
out.println(s);
else break;
}
out.close();
in.close();
}
}
读取二进制
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
//读取二进制文件
public class BinaryFile {
public static byte[] read(File bfile) throws IOException{
try (BufferedInputStream bf = new BufferedInputStream(new FileInputStream(bfile))) {
byte[] data = new byte[bf.available()];//available返回bf可以无阻塞读取的最大字节数
bf.read(data);
return data;
}
// try{
// byte[] data = new byte[bf.available()];
// bf.read(data);
// return data;
// }finally {
// bf.close();
// }
// try(BufferedInputStream bf = new BufferedInputStream(new FileInputStream(bfile))){
// byte[] data = new byte[bf.available()];
// bf.read(data);
// return data;
// }
}
public static byte[] read(String bfile) throws IOException{
return read(new File(bfile).getAbsoluteFile());
}
}
DataOutputStream
import java.io.*;
public class StrongAndRecoveringData {
public static void main(String...args) throws IOException {
DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("Data.txt")));
out.writeDouble(3.15159);
out.writeUTF("That was p1");
out.writeDouble(1.41413);
out.writeUTF("Square root of 2");
out.close();
DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream("Data.txt")));
System.out.println(in.readDouble());
System.out.println(in.readUTF());
System.out.println(in.readDouble());
System.out.println(in.readUTF());
}
}
标准输入输出
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
/*
从标准输入中读取
将System.out转换为PrintWriter
*/
//System.in为InputStream
//System.out为OutputStream
public class Echo {
public static void main(String...args) throws IOException {
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
PrintWriter out = new PrintWriter(System.out,true);//第二个参数“autoFlush”不写的话可能得不到输出
String s;
while((s = stdin.readLine())!=null&&s.length()!=0)
out.println(s);
out.close();
stdin.close();
}
}
重定向
import java.io.*;
public class Redirecting {
public static void main(String...args) throws IOException {
PrintStream console = System.out;
BufferedInputStream in = new BufferedInputStream(
new FileInputStream("src/com/FileTest/Redirecting.java")
);
PrintStream out = new PrintStream(new BufferedOutputStream(
new FileOutputStream("test.out")
));
System.setIn(in);//system.in重定向到文件 Redirecting.java
System.setOut(out);//将system.out重定向到文件 test.out
System.setErr(out);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s;
while((s = br.readLine())!=null)
System.out.println(s);
out.close();//关闭
System.setOut(console);//将system.out恢复
}
}
RandomAccessFile
import java.io.IOException;
import java.io.RandomAccessFile;
/*RandomAccessFile实现DataInput和DataOutput 不能再使用其他装饰类*/
/* 构造函数第二个参数 r表示只读 rw表示读写*/
/* 使用seek() 可以使文件指针移动*/
public class UsingRandomAccessFile {
static String file = "rtest.dat";
static void display() throws IOException {
RandomAccessFile rf = new RandomAccessFile(file,"r");
for(int i = 0;i<7;i++)
System.out.println("Value " + i + " :" + rf.readDouble());
System.out.println(rf.readUTF());
rf.close();
}
public static void main(String...args) throws IOException{
RandomAccessFile rf = new RandomAccessFile(file,"rw");
for(int i = 0;i<7;i++)
rf.writeDouble(i*1.414);
rf.writeUTF("the end of the file");
rf.close();
display();
rf = new RandomAccessFile(file,"rw");
rf.seek(5*8);
rf.writeDouble(47.0001);
rf.close();
display();
}
}
文件的一个工具
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.TreeSet;
public class TextFile extends ArrayList<String> {
//Read a file as a single string:
//将filename的所有信息读入String
public static String read(String filename){
StringBuilder sb = new StringBuilder();
try{
//getAbsoluteFile(): 返回一个File对象 包含绝对路径
BufferedReader in = new BufferedReader(new FileReader(new File(filename).getAbsoluteFile()));
try{
String s;
while((s = in.readLine())!=null) {
sb.append(s);
sb.append("\n");
}
}finally {
in.close();
}
}catch(IOException e){
throw new RuntimeException(e);
}
//返回绝对路径 String类型
//System.out.println(new File(filename).getAbsolutePath());
return sb.toString();
}
//写入文件 若没有就创建
public static void write(String filename,String text){
try{
//PrintWriter 创建文件
PrintWriter out = new PrintWriter(new
File(filename).getAbsoluteFile());
try{
out.print(text);
}finally {
out.close();
}
}catch(IOException e){
throw new RuntimeException(e);
}
}
//Read a file, split by regular expression:
//把filename的内容全放入到TextFile中
public TextFile(String filename,String splitter){
super(Arrays.asList(read(filename).split(splitter)));
if(get(0).equals(""))
remove(0);
}
//Normally read by lines:
public TextFile(String filename){
this(filename,"\n");
}
public void write(String filename){
try{
//对比上一个write
// 这里运用java7以上的关闭资源的方法:
// try后面写需要打开的资源(需要实现AutoCloseable) 然后结束后自动关闭
//...参考core java 第七章
try (PrintWriter out = new PrintWriter(new File(filename).getAbsoluteFile())) {
for (String item : this)
out.println(item);
}
}catch(IOException e){
throw new RuntimeException(e);
}
}
//simple test:
public static void main(String[] args){
/*将文件内容存入String*/
String file = read("src/com/FileTest/TextFile.java");
/*将String内容读入文件*/
write("test.txt",file);
/*将文件内容存入TextFile*/
TextFile textFile = new TextFile("test.txt");
/*将TextFile的内容写入文件*/
textFile.write("test2.txt");
TreeSet<String> words = new TreeSet<>(
new TextFile("src/com/FileTest/TextFile.java","\\W+"));
System.out.println(words.headSet("a"));
}
}
压缩与解压
package com.FileTest;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class FileZip {
public static void main(String...args) throws Exception{
//定义要压缩的文件
// File file = new File("test.txt");
// //定义压缩文件名称
// File zipFile = new File("sww.zip");
//
// InputStream input = new FileInputStream(file);
// ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
// //压缩后的文件名称
// zipOut.putNextEntry(new ZipEntry(file.getName()));
// //设置注释
// zipOut.setComment("设置注释");
//
// //压缩过程
// int temp = 0;
// while((temp = input.read())!=-1){
// zipOut.write(temp);
// System.out.print((char)temp);
// }
// input.close();
// zipOut.close();
/*解压*/
ZipInputStream input1 = new ZipInputStream(new FileInputStream("sww.zip"));
//以下ZipEntry entry = input1.getNextEntry(); 这句话必须写,获得压缩包子文件
ZipEntry entry = input1.getNextEntry();
OutputStream zipout = new FileOutputStream("sww1.txt");
int t = 0;
while((t = input1.read())!=-1){
zipout.write(t);
System.out.print((char)t);
}
input1.close();
zipout.close();
}
}
ZipEntry entry = input1.getNextEntry();
entry获取压缩包的具体文件
若在解压缩操作中去掉,解压出的文件为空
ZipEntry 类用于表示 ZIP 文件条目
基础详见文档
未完待续