文件对象常用方法
File file = new File("e:/xx.txt");
file.getAbsolutePath()
file.exists()
file.isDirectory()
file.isFile()
file.length()
file.lastModified()
file.setLastModified(0)
file.renameTo(file2)
file.list()
file.listFiles()
file.getParent()
file.getParentFile();
file.mkdir()
file.midirs()
file.createnewFile();
file.getParentFile().mkdirs()
File.listRoots()
file.delete()
file.createTempFile();
file.deleteOnExit()
字节流
File f = new File("d:/xx.txt");
FileInputStream fis = new FileInputStream(f);
byte[] all = new byte[(int)f.length()];
fis.read(all);
System.out.printLn(all[0]);
fis.close();
File f = new File("d:/xx.txt");
byte data[] = {88,89};
FileOutPutStream fos = new FileOutPutStream(f);
fos.write(data);
fos.close();
字符流
FileReader fr = new FileReder(f);
char[] all = new char[(int) f.length()];
fr.read(all);
FileWrite fr = new FileWrite(f);
String data = "abcdefg";
char[] cs = data.toCharArray();
fr.write(cs);
缓存流
- 缓存流在写入数据时,会先把数据写入到缓存区,直到缓存区达到一定的量,才将数据写入硬盘中。这种操作不会像字节流和字符流那样每写一个字节都访问硬盘,从而减少了IO操作。·
- 读取数据
File f = new File("F:/有感.txt");
try(
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);)
{
while(true)
{
String line = br.readLine();
if(line == null)
break;
System.out.println(line);
}
}catch(IOException e) {
e.printStackTrace();
}
File f = new File("F:/xx.txt");
try(
FileWriter fw = new FileWriter(f);
PrintWriter pw = new PrintWriter(fw);)
{
pw.println("xxxxxxx");
pw.println("xxxxxxx");
}catch(IOException e) {
e.printStackTrace();
}
- flush可以将数据立即写入硬盘,而不是等缓存满了之后才写进去。
...
pw.println("xxxxxxx");
pw.flush();
pw.println("xxxxxxx");
...
数据流
- 数据输入流(DataInputStream)、数据输出流(DataOutputStream)。
- 使用数据流的writeUTF()和readUTF()可以进行数据的格式化顺序读写。
- 要用DatainputStream读取一个文件,这个文件必须是由DataOutputStream写入的,否则会出现EOFException.
public static void main(String[] args)
{
write();
read();
}
private static void read() {
File f = new File("F:/xx.txt");
try(
FileInputStream fis = new FileInputStream(f);
DataInputStream dis = new DataInputStream(fis);)
{
boolean b = dis.readBoolean();
int i = dis.readInt();
String str = dis.readUTF();
System.out.print("布尔值:"+b);
System.out.print("整数:"+i);
System.out.print("字符串:"+str);
}catch(IOException e) {
e.printStackTrace();
}
}
private static void write() {
File f = new File("F:/xx.txt");
try(
FileOutputStream fos = new FileOutputStream(f);
DataOutputStream dos = new DataOutputStream(fos);)
{
dos.writeBoolean(true);
dos.writeInt(300);
dos.writeUTF("123 this is gareen");
}catch(IOException e)
{
e.printStackTrace();
}
}
对象流
- 对象流指的是可以直接吧一个对象以流的形式传输给其他的介质,比如硬盘。
- 一个对象以流的形式传输,叫做序列化。该对象所对应的类,必须是实现Serializable接口。
public static void main(String[] args)
{
Hero h = new Hero();
h.setName("英雄");
File f= new File("f:/hero.lol");
try (
FileOutputStream fos = new FileOutputStream(f);
ObjectOutputStream oos = new ObjectOutputStream(fos);
FileInputStream fis = new FileInputStream(f);
ObjectInputStream ois = new ObjectInputStream(fis);
){
oos.writeObject(h);
Hero h2 = (Hero) ois.readObject();
System.out.println(h2.getname());
}catch(IOException e) {
e.printStackTrace();
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
}
System.in
- System.out是常用的在控制台输出数据。
- System.in可以从控制台输入数据。
try (InputStream is = System.in;){
while(true) {
int i = is.read();
System.out.println(i);
}
}catch(IOException e)
{
e.printStackTrace();
}
Scanner s = new Scanner(System.in);
while(true)
{
String line = s.nextLine();
System.out.println(line);
}

- 流分为字节流和字符流
- 字节流下面常用的又有数据流和对象流
- 字符流下面常用的又有缓存流