系统中分为临时储存和硬盘两大块 临时储存:当前正在运行的程序提供资源 硬盘:文件中的资源 IO流就是在这两者之间进行操作的
一切皆字节
把临时存储的东西存到硬盘上(文件中)
常用方法
void writer(); void flash(); void close();其中输出字节流子类中最常用的就是FileOutputStream 写数据的时候会把97转化为二进制数据,然后软件把二进制文件解码成a;
//一次写一个字节 public void write(byte b); //一次写多个字节 public void write(byte[] bytes); public void write(byte[] bytes, int offset, int len);附加: 字符串怎么转化为字节数组
byte[] bytes = "HelloWorld".getBytes();数据的追加,续写
//构造方法 FileOutputStream(String pathname, boolean append); FileOutputStream(File file, boolean append);共有的方法
int read()// 返回值是字符的编码值 int read(byte[] bytes)// 返回值是数组的长度,bytes是读取的数组 void close()构造方法
FileInputStream(FIle file); FileInputStream(String name);一般的读取工作是这样的
FileInputStream fis = new FileInputStream("D:\\Java\\javaExmaple1\\src\\practice\\IOStream\\a.txt"); int len = 0; while((len = fis.read()) != -1) { System.out.println((char) len); } fis.close();附加:String类的构造方法
String(byte[] bytes); //比如 String s = new String(bytes);先关闭写的流,再关闭读的流
分为字符输入流和字符输出流 Reader: 常用 FileReader Writer: 常用FileWriter
通用的方法
int read(); int read(char[] cbuf); void close();接下来介绍FileReader FileReader extends InputStreamReader
构造方法
FileReader(String pathname); FileReader(File file);附加: String构造方法
String(char[] chars); String (byte[] bytes);公用的方法 (可以直接写如字符串)
void write(char[] cbuf); void write(char[] cbuf, int offset, int len); void write(String str); void write(String str, int offset, int len); void flush();//把缓冲流中的数据刷新到临时存储中去 void close();FileWriter extends OutputStreamWriter
构造方法
FileWriter(File file, boolean append); FileWriter(String pathname,bollean append);附加:异常处理
try{ //可能会产生异常的代码 }catch(异常类变量 变量名) { //异常处理逻辑 }finally{ //一定会执行的代码,一般是资源释放 }JDK7新特性
try(定义流对象,之后会自动释放,就不需要finally中间用分号){ //可能会产生异常的代码 }catch(异常类变量 变量名) { //异常处理逻辑 }JDK9新特性
A a = new A(); B b = new B(); //这边也是自动释放 try(a;b){ //可能会产生异常的代码 }catch(异常类变量 变量名) { //异常处理逻辑 }java.util.Properties extends Hashtable<K,V> 实现了map类的方法
有两个特有方法
void store(OutputStream out, String comments)//后面的那个是注解的意思 void store(Writer writer,String comments);//写入把properties实现类的对象的内容写入writer了 void load(InputStream in);//读出把in中的数据读出到properties实现类的对象中 void load(Reader reader);还有一些作为hasetable的子类的特有方法,k,v都是字符串
prop.setProperty("lwt","173");//设置,存入键值对,相当于put Set<String> set = prop.stringPropertyNames();// 得到键的集合 ,通过键获取值 String value = prop.getProperty(key);//通过键获取值具体实现代码 (哈希表的遍历不能忘)
public class Demo10Property { public static void main(String[] args) throws IOException { show03(); } private static void show02() throws IOException { Properties prop = new Properties(); prop.setProperty("lwt","173");//设置,存入键值对,相当于put prop.setProperty("ljy","187"); prop.setProperty("zth","184"); FileWriter fw = new FileWriter("D:\\Java\\javaExmaple1\\src\\practice\\IOStream\\prop.txt"); prop.store(fw,"save data"); fw.close(); } public static void show01() { // Properties继承了HashTable // 有三个方法 Properties prop = new Properties(); prop.setProperty("lwt","173");//设置,存入键值对,相当于put prop.setProperty("ljy","187"); prop.setProperty("zth","184"); // 得到键的集合 ,通过键获取值 Set<String> set = prop.stringPropertyNames(); for (String key : set) { // 通过键获取值 String value = prop.getProperty(key); System.out.println(key + "=" + value); } } public static void show03() throws IOException { Properties prop = new Properties(); prop.load(new FileReader("D:\\Java\\javaExmaple1\\src\\practice\\IOStream\\prop.txt")); Set<String> set = prop.stringPropertyNames(); for (String key : set) { String value = prop.getProperty(key); System.out.println(key + "=" + value); } } }