File
File能代表一个特定的文件的名称,也能代表一个目录下的一组文件的名称
不仅能代表存在的文件或目录,也可以创建新的目录和文件,还可以查看文件的特性,删除。巨多方法参见jdk文档
输入输出
InputStream或Reader派生而来的类都有个reader()方法,OutStream或Writer派生而来的类都有write()方法,用于单个或数组字节输入和输出,一般很少用单一的类来创建,而是叠加使用,就是装饰器
– InputStream 类型
ByteArrayInpuStream
StringBufferInputSteram
FileInputStream
PipedInputStream
SequenceInputStream
FilterInputStream
– OutputStream 类型
ByteArrayOutStream
FileOutStream
PipedOutStream
FilterOutStream
具体用法jdk查
FilterInputStream从InputStream 读取数据
DataInputStream 可以从流中基本数据类型
BufferedInputStream 使用缓冲区
LinNumberInputStream 跟踪流中的行号,getLineNumber();
PushbackInputStream ??弹出一个字节的缓冲区??
FilterOutStream向OutStream写数据
DataOutStream 可以从流中基本数据类型
PrintStream 产生格式化输出
BufferedOutStream 使用缓存,可以使用fulsh清空缓存
stream结尾都是字节流,reader和writer结尾都是字符流,两者的区别就是读写的时候一个是按字节读写,一个是按字符。实际使用通常差不多。在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。只是读写文件,和文件内容无关的,一般选择字节流。复制文件,图片,mp3,mp4都用字节流来读取就行但是若要获取文件内容,比如txt里面的文字,就要用字符流来读取
缓冲流
– BufferedReader
BufferedReader在实现时通过提供一个readLine方法,使用数组或者stringBuilder存储一行数据,并一次性返回
– BufferedWriter
– BufferedInputStream
BufferedInputStream在实现的时候是在自身read方法中提供缓存,是一次取1024或更多字节然后再慢慢读,一个个的返回,它并没有实现读一行的方法
– BufferedOutputStream
BufferedReader,BufferedWriter缓冲输入文件
package testfile;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.LinkedList;
public class BufferedInputFile {
public static String read (String filename) throws IOException{
BufferedReader in = new BufferedReader( new FileReader(filename));
String s;
LinkedList<String> linkedList = new LinkedList<String>();
int i = 1;
//in.readLine都不到东西会返回一个null
while((s = in.readLine()) != null)
{
linkedList.add(s);
}
in.close();
//缓冲有默认的大小,一般情况是够用的
BufferedWriter out = new BufferedWriter(
new FileWriter("E:/ddd.txt"),1024);
for (String str : linkedList) {
out.write(i++ + "--" + str);
out.newLine();
}
out.flush();///关闭前必须刷新
out.close();
return "OK";
}
public static void main(String[] args) throws IOException {
tim();
}
public static void tim() throws IOException{
long startMili=System.currentTimeMillis();// 当前时间对应的毫秒数
System.out.println("开始 " + startMili);
System.out.println(read("E:/sss.txt"));
long endMili=System.currentTimeMillis();
System.out.println("结束 s" + endMili);
System.out.println("总耗时为:" + (endMili - startMili)+"毫秒");
}
}