绝对路径:从盘符开始,是一个完整的路径 比如:c://a.txt
相对路径:在java中是相对于项目目录路径,这是一个不完整的便捷路径,在java开发中很常用,例如:a.txt
概述:可以将这种数据传输操作,看做一种数据的流动,按照流动的方向分为输入Input和输出Output。
按照流的方向来分,可以分为输入流和输出流
按照流动的数据类型来分,可以分为字节流和字符流
字节流:一切皆字节
输入流: 顶级父类InputStream
输出流:顶级父类OutputStream
字符流:
输入流:Reader
输出流:Writer
后续学习的任何流,在传输时底层都是二进制
close()
关闭此输出流并释放与此流相关联的任何系统资源。
flush()
刷新此输出流并强制任何缓冲的输出字节被写出。
write(byte[] b)
将 b.length字节从指定的字节数组写入此输出流。
write(byte[] b, int off, int len)
从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。
write(int b)
将指定的字节写入此输出流。 不能超过255
FileOutputStream(File file)
创建文件输出流以写入由指定的 File对象表示的文件。
ileOutputStream(File file, boolean append)
创建文件输出流以写入由指定的 File对象表示的文件。 若append是true则接着写,若是false,则清空再写
FileOutputStream(String name)
创建文件输出流以指定的名称写入文件。
FileOutputStream(String name, boolean append)
创建文件输出流以指定的名称写入文件。 若append是true则接着写,若是false,则清空再写
public static void main(String[] args) throws IOException { FileOutputStream fos = new FileOutputStream("d://a.txt"); //非追加模式 byte[] bytes = {65,66,67,68,69}; //写入的字节用ASCII码转换 fos.write(bytes); //写入文件 fos.close(); //记得关闭文件输出流 } public static void main(String[] args) throws IOException { FileOutputStream fos = new FileOutputStream("d://a.txt",true); //追加模式,在原有的基础上再写入 byte[] bytes = "ABCDE".getBytes(); //写入的字节用ASCII码转换 fos.write(bytes); //写入文件 fos.close(); //记得关闭文件输出流 }public static void main(String[] args) throws IOException { FileOutputStream fos = new FileOutputStream("d://a.txt",true); //追加模式,在原有的基础上再写入 byte[] bytes = "ABCDE".getBytes(); //写入的字节用ASCII码转换 fos.write(bytes,1,2); //从1下标开始写,写两个 fos.close(); //记得关闭文件输出流 }
注:只有一个流被重新创建的时候才需要指定是否追加。流关闭后不能再去写。
int
available()
返回从此输入流中可以读取(或跳过)的剩余字节数的估计值,而不会被下一次调用此输入流的方法阻塞。
void
close()
关闭此文件输入流并释放与流相关联的任何系统资源。
protected void
finalize()
已过时。
finalize方法已被弃用。 为了执行清理而覆盖finalize子类应该修改为使用替代清理机制,并删除覆盖的finalize方法。 当覆盖finalize方法时,其实现必须明确确保按照super.finalize()所述调用super.finalize() 。 有关迁移选项的更多信息,请参阅Object.finalize()的规范。
FileChannel
getChannel()
返回与此文件输入流相关联的唯一的FileChannel对象。
FileDescriptor
getFD()
返回表示与此 FileInputStream正在使用的文件系统中的实际文件的连接的 FileDescriptor对象。
int
read()
从该输入流读取一个字节的数据。
int
read(byte[] b)
从该输入流读取最多 b.length个字节的数据到一个字节数组。
int
read(byte[] b, int off, int len)
从该输入流读取最多 len个字节的数据到字节数组。
long
skip(long n)
跳过并从输入流中丢弃 n字节的数据。
public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("d://a.txt"); while(true) { byte b = (byte) fis.read(); //读取a.txt文件,每次读取一个字节 if(b==-1){ //如果读取完就退出 break; } System.out.println((char)b); //转换成字符输出 } fis.close(); } public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("d://a.txt"); byte[] bytes = new byte[10]; int len = fis.read(bytes); System.out.println(new String(bytes,0,len)); //读取0到len个字符 len = fis.read(bytes); System.out.println(new String(bytes,0,len)); len = fis.read(bytes); System.out.println(len); fis.close(); }Writer
append(char c)
将指定的字符附加到此作者。
Writer
append(CharSequence csq)
将指定的字符序列附加到此作者。
Writer
append(CharSequence csq, int start, int end)
将指定字符序列的子序列附加到此作者。
abstract void
close()
关闭流,先刷新。
abstract void
flush()
刷新流。
void
write(char[] cbuf)
写入一个字符数组。
abstract void
write(char[] cbuf, int off, int len)
写入字符数组的一部分。
void
write(int c)
写一个字符
void
write(String str)
写一个字符串
void
write(String str, int off, int len)
写一个字符串的一部分。
public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("d://a.txt",true); fw.write("巴拉巴拉巴拉"); fw.close(); } public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("d://a.txt"); fw.append("ab").append("cd").append("ef"); fw.close(); }注:追加与是否true有关,与append无关
abstract void
close()
关闭流并释放与之相关联的任何系统资源。
void
mark(int readAheadLimit)
标记流中的当前位置。
boolean
markSupported()
告诉这个流是否支持mark()操作。
int
read()
读一个字符
int
read(char[] cbuf)
将字符读入数组。
abstract int
read(char[] cbuf, int off, int len)
将字符读入数组的一部分。
int
read(CharBuffer target)
尝试将字符读入指定的字符缓冲区。
boolean
ready()
告诉这个流是否准备好被读取。
void
reset()
重置流。
long
skip(long n)
跳过字符
字节流‘装饰’为字符流 : 使用了装饰者设计模式
FileInputStream fis = new FileInputStream("d://a.txt"); //将字节输入流转换为字符输入流 //参数1:要转换的字节流 //参数2:指定编码名称(gbk,utf-8) InputStreamReader isr = new InputStreamReader(fis); while (true){ int c = isr.read(); if(c==-1){ break; } System.out.println((char)c); } //缓存字符读取流: 字节输入流-->字符输入流-->缓存字符读取流,可以一次读一行 FileReader fw = new FileReader("d://a.txt"); BufferedReader br = new BufferedReader(fw); String text = br.readLine();//返回到最后会返回null System.out.println(text); text = br.readLine(); System.out.println(text);void
clear()
清除此散列表,使其不包含键。
Object
put(Object key, Object value)
将指定的 key映射到此散列表中指定的 value 。
Object
remove(Object key)
从此散列表中删除键(及其对应的值)。
void
load(InputStream inStream)
从输入字节流读取属性列表(键和元素对)。
void
load(Reader reader)
以简单的线性格式从输入字符流读取属性列表(关键字和元素对)。
void
store(OutputStream out, String comments)
将此 Properties表中的此属性列表(键和元素对)以适合于使用 load(InputStream)方法加载到 Properties表格的格式写入输出流。
void
store(Writer writer, String comments)
将此属性列表(键和元素对)写入此 Properties表中,以适合使用 load(Reader)方法的格式输出到输出字符流。
boolean
isEmpty()
测试这个哈希表是否将值映射到值。
String
getProperty(String key)
使用此属性列表中指定的键搜索属性。
Object
get(Object key)
返回指定键映射到的值,如果此映射不包含键的映射,则返回 null 。
Properties ppt = new Properties(); ppt.put("1","一楼"); //存储Map键值对 ppt.put("2","二楼"); ppt.put("2","三楼"); FileWriter fw = new FileWriter("d://a.properties");//存储为.properties文件 ppt.store(fw,"floor"); //将键值对存储进a.properties里,comments是注释,一般不建议用中文 fw.close();