流和File类常用总结
--------------------------------------------------------------------------------------------------
常用实例:一、PrintWriter输出文件:
package t;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.PrintWriter;
public class file {
public static void main(String[] args) throws Exception {
File f=new File("src/text.txt");
PrintWriter pw=new PrintWriter(f);
pw.write("test");
pw.println("hang1");
pw.print("buhuan");
pw.println("hang2");
pw.flush();
pw.close();
}
}
二、BufferedReader读取文件:
package t;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
public class printwriter {
public static void main(String[] args) throws Exception {
File f=new File("src/text.txt");
FileReader fw=new FileReader(f);
BufferedReader br=new BufferedReader(fw);
String str=null;
while((str=br.readLine())!=null){
System.out.println(str);
}
br.close();
}
}
三、File类
当对路径:
File f=new File("text.txt"); 到当前项目文件夹下;
"src/text.txt"或"src\\text.txt"; 到项目下的src文件夹下;
绝对路径:
"E:/tt/t.txt"或"E:\\tt\\t.txt"; 如果没有该目录,在写文件时会报错
--------------------------------------------------------------------------------------------------
常用知识点:
一、常用到的字节输入流和输出流
in:输入流
1. ByteArrayInputStream: 读取byte类型的数组中的数据
2. FileInputStream: 从文件中读取数据;
3. PipedInputStream: (管道流)连接一个 PipedOutputStream;
4. ObjectInputStream: 对象输入流;
5. StringBufferInputStream: 可以读取一个字符串,在API中已经过时
out: 输出流
6.ByteArrayOutputStream:
7.FileOutputStream
8.PipedoutputStream:
9.ObjectoutputStream(序列化)
二、常用到的字符输入流和输出流
Reader:输入流
CharArrayReader : 把字符数组转换为Reader,从字符数组中读取字符;
*FileReader : 从文件中读取字符;
*BufferedReader : 过滤器,为其他Reader提供读缓冲区,此外,它的readLine()方法能够读入一行字符串;//常用
StringReader : 把字符串转换为Reader,从字符串中读取字符;
PipedReader : 连接一个PipedWriter;
*InputStreamReader : 过滤器,把InputStream转换为Reader,可以指定字符编码;
PushBackReader : 能把读到的字符压回到缓冲区中,通常用做编译器的扫描器,在程序中一般很少使用它。
Writer:输出流
*PrintWriter
FileWriter
*OutputStreamWriter
三、FileInputStream 和 FileOutputStream
1. 当创建一个FileInputStream对象的时候,文件必须存在以及是可读的
FileInputStream(File file)
FileInputStream(String name)
2. 当创建一个FileOutputStream对象的时候,可以创建一个新的文件,也可以覆盖一个已经存在的同名文件。如果要创建的文件已经存在,可以选择向旧文件添加新的内容(append为true)或者新的内容覆盖旧文件的内容(append为false)。
FileOutputStream(File file)
FileOutputStream(File file, boolean append)
FileOutputStream(String name)
FileOutputStream(String name, boolean append)
四、*InputStreamReader 和 OutputStreamWriter
包装流。
*InputStreamReader类把InputStream类型转换为Reader类型
*OutputStreamWriter类把OutputStream类型转换为Writer类型
构造方法:
. InputStreamReader(InputStream in): 按照本地平台的字符编码读取输入流中的字符;
. InputStreamReader(InputStream in, String charsetName): 按照指定的字符编码读取输入流中的字符;
. OutputStreamWriter(OutputStream out): 创建使用默认字符编码的 OutputStreamWriter;
. OutputStreamWriter(OutputStream out, String charsetName): 创建使用指定字符集的 OutputStreamWriter。
五、FileReader和FileWriter
InputStreamReader的一个子类,用于从文件中读取字符数据。该类只能按照本地平台的字符编码来读取数据,用户不能指定其他字符编码类型。
. FileReader(File file): 参数file指定需要读取的文件;
. FileReader(String name): 参数name指定需要读取的文件的路径;
. FileWriter(File file)
. FileWriter(String filename)
* . FileWriter(String fileName, boolean append)
根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象,true为追加,false为覆盖。
FileReader:new FileReader(“d:/back/string.txt”) =
new InputStreamReader(new FileInputStream(“d:/back/string.txt”));
FileWriter:new FileWriter(“d:/back/string.txt”) =
new InputStreamWriter(new FileOutputStream(“d:/back/string.txt”));
六、*BufferedReader类(*常用,有readLine方法)
Reader类的read()方法每次都从数据源读入一个字符,BufferedReader带有缓冲区,它可以先把一批数据读到缓冲区内,接下来的操作都从缓冲区内获取数据,避免每次都从数据源读取数据并进行字符编码转换,从而提高读操作的效率。
BufferedReader的readLine()方法可以一次读入一行字符,以字符形式返回。
. BufferedReader(Reader in): 指定被修饰的Reader类;
. BufferedReader(Reader in, int sz): 参数in指定被装饰的Reader类,参数sz指定缓冲区的大小,以字符为单位。
七、*PrintWriter(*常用,有write/print方法写一行,println方法带换行)
可以输出基本数据类型、对象、字符(字符数组)和字符串,但是不能输出字节流。
PrintWriter类可以代替桥和BufferedWriter
PrintStream类既可以输出字节流也可以输出字符流或者字符串
*最后要用flush刷新缓存,用close关闭流。
八、File类
1. 构造方法
. File(String pathname): 参数pathname表示文件路径或者目录路径;
. File(String parent, String child): 参数parent表示根路径,参数child表示子路径;
. File(File parent, String child): 参数parent表示根路径,参数child表示子路径;
2. 普通方法
. boolean createNewFile():文件已经存在,则创建失败(返回false),否则创建成功(返回true)。
. boolean delete():删除文件或者空目录
. boolean mkdir()/mkdirs():创建一个或者多个目录(连续创建)->如果该目录的父目录不存在话,那么还会创建所有的父目录;
. boolean renameTo(File destination):文件的改名
. boolean canRead()/canWrite():判断指定的文件是否能读取或者写入数据
. boolean exists():判断指定的文件或者目录是否存在
. String[] list():返回指定目录下所有文件名或者子目录名所组成的字符串数组
. long lastModified():返回指定文件最后一次被修改的时间(从1970年1月1日凌晨12点到这个文件的修改时间之间所经历的毫秒数)
. String getPath()/getAbsolutePath():返回指定文件或者目录的路径和绝对路径
. String getCanonicalPath(): 获取该File对象所代表的文件或者目录的正规路径
. String getParent()/getName():返回指定文件或者目录的父目录(没有返回null)和名字
File f = new File(".\\test.txt"));
System.out.println(f.getCanonicalPath()); //c:\mytest\test.txt
System.out.println(f.getAbsolutePath()); //c:\mytest\ .\test.txt
System.out.println(f.getPath()); //.\test.txt
if(!f.exists()) f.createNewFile());
九、对象的序列化和反序列化
对象的序列化: 把对象写到一个输出流;
对象的反序列化:从一个输入流中读取一个对象;
1. 对象的持久化
2. 仅仅是一个对象的数据被序列化(将对象的数据序列化成字节流)
3. 标识为transit的数据不能被序列化 例如:transit 类名 表示该类不能被序列化 或者transit 字段
4. 要序列化的对象必须实现java.io.Serializable接口
对象的序列化主要用于:
1. 网络中传输的是字节流的数据,网络中对象的传输,是将对象的数据经过序列化后转换成字节流。
2.将对象数据序列化到文件中,将对象数据转换成字节流存储到文件中。
从文件中读取字节流数据并转换成对象叫做对象的反序列化。
ObjectInputStream 和ObjectOutputStream(对象输入和输出流,可以读写基本数据类型和对象)
1. ObjectInputStream 和ObjectOutputStream为应用程序提供对象的持久化存储
2. 一个ObjectInputStream 可以反序列化通过ObjectOutputStream写入的基本数据类型和对象
3. 构造器
ObjectInputStream(InputStream in)
ObjectOutputStream(OutputStream out)
4. 方法
readObject()/writeObject() 将对象写入到输出流中或者从输入流中读取对象