java - 012 - IO

mark

UTF - 8 它是一种变长的字符集
表示:单字节来表示字母,双字节来表示一些希腊字母,三字节来表示汉字,当然也有四字节的  这么做当然会增加表示和识别的难度,不过,可以节省空间。这也是为什么utf-8在网络编码中流行的原因。

File

定义:表示了磁盘上的文件或者目录

  File f = new File("/Users/liyang/Documents");
  f.isDirectory();//是否是个目录
  f.isFile();//是否是个文件
  f.mkdir();//创建目录,只能创建一级目录
  f.mkdirs();//创建多级目录
  f.createNewFile();//创建文件
  f.list();//当前目录下的文件和目录名字
  f.listFiles();//返回当前目录的File对象
  f.delete();//删除File
 
 File[] files = f.listFiles(**new** FilenameFilter(){//策略模式,这里用的匿名内部类
   @Override
   public boolean accept(File dir, String name) {
    if (name.startsWith("git")){
     return true;
    }
    return false;
   }
  });
 for (File ff : files){
  System.out.println(ff.getName());
 }```

###warning
- windows平台的路径分隔符号“\”
- others平台的路径分隔符为"/"

File.separator;//解决上面的问题

#流
- 分类
1.功能上分类:输入流和输出流
2.处理数据单位不同:字节流和字符流
3.按功能的不同:节点流和处理流

| | 字节流 | 字符流|
| :----: | :----: | :-----: |
|输入流 | InputStream | Reader|
|输出流 | OutputStream | Writer|
---
#字节流
#FileInputStream

File f = new File("/Users/liyang/Documents/test.txt");
InputStream in = new FileInputStream(f);
byte[] buffer = new byte[200];
int length = 0;
while(-1 != (length = in.read(buffer))){//将文件读到buffer里面,长度每次为200,直到最后一次小于200
String str = new String(buffer,0,length);
System.out.println(str);
}
in.close();

#FileOutputStream

File f = new File("/Users/liyang/Documents/page2.jpg");
File cf = new File("/Users/liyang/Documents/copypage2.jpg");
cf.createNewFile();
InputStream in = new FileInputStream(f);
OutputStream out = new FileOutputStream(cf);
byte[] buffer = new byte[200];
int length = 0;
while(-1 != (length = in.read(buffer))){//将文件读到buffer里面,长度每次为200,直到最后一次小于200
out.write(buffer,0,length);//这里一定,最好是用这种方式,这个方法是将整个字节数组指定长度的内容都输入进去
String str = new String(buffer,0,length);
System.out.println(str);
}
out.flush();
in.close();
out.close();

#BufferedOutputStream
 File f = new File("1.txt");
 OutputStream out = new FileOutputStream(f,true);//true表示追加
 out = new BufferedOutputStream(out);//缓冲流
 out.write("http://www.baidu.com".getBytes());
 out.flush();
 out.close();
#DataOutputStream And DataInputStream

//DataOutputStream 以二进制的方式写入基本数据类型,生成的也是二进制文件
String filePath = "/Users/liyang/Documents/test.txt";
DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(filePath)));

byte b = 4;
int i =12;
char ch = 'a';
float f = 4.4f;

dos.write(b);
dos.writeInt(i);
dos.writeChar(ch);
dos.writeFloat(f);

dos.flush();
dos.close();

DataInputStream ios = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));

System.out.println(ios.readByte());
System.out.println(ios.readInt());
System.out.println(ios.readChar());
System.out.println(ios.readFloat());

ios.close();

---
#字符流
#OutputStreamWriter And InputStreamReader 字节流和字符流的转化

String filePath= "/Users/liyang/Documents/test1.txt";
FileOutputStream f = new FileOutputStream(filePath,true);
OutputStreamWriter or= new OutputStreamWriter(f);//字符流和字节流的转换桥梁
BufferedWriter bw = new BufferedWriter(or);
bw.write("ss来了");
bw.flush();
bw.close();

InputStream in =new FileInputStream(filePath);
Reader r = new InputStreamReader(in);
BufferedReader br = new BufferedReader(r);
String rStr = br.readLine();
System.out.println(rStr);

InputStreamReader ins = new InputStreamReader(System.in);//键盘输入标准输入流
BufferedReader br = new BufferedReader(ins);
String tmpStr;
while (null != (tmpStr = br.readLine())){
System.out.println(tmpStr);
}
br.close();

#FileWriter And FileReader

String filePath= "/Users/liyang/Documents/test1.txt";
Writer w = new FileWriter(filePath,true);
BufferedWriter bw = new BufferedWriter(w);
bw.write("我颠覆流整个世界,只为摆正你的倒影");
bw.write("\n");
bw.flush();
bw.close();

Reader r = new FileReader(filePath);
BufferedReader br = new BufferedReader(r);
String str;
while (null != (str = br.readLine()) ){
System.out.println(str);
}
br.close();

#ObjectOutputStream And ObjectInputStream
###对象序列化,对象要序列化需要实现java.io.Serializable接口
定义:将对象转换为字节流保存起来,并在以后还原这个对象,这种机制叫做对象序列化
mark:将一个对象永久存储到设备上称为持久化。

warning:
1.只能序列化非静态变量,不能序列化任何静态变量
2.序列化成员变量,如果成员变量是一个对象,对象也必须可序列化,否则出错
3.当成员变量用transient修饰的时候,序列化的时候就会跳过该属性的序列化

public class test {
private static ObjectInputStream oi;
public static void main(String[] args) throws Exception {
Person p1 = new Person(20,"lilei",169);
Person p2 = new Person(21,"lilei1",180);
Person p3 = new Person(22,"lilei2",179);
//序列化
String filePath = "/Users/liyang/Documents/testSerializable.txt";
OutputStream out = new FileOutputStream(filePath);
ObjectOutputStream os = new ObjectOutputStream(out);
os.writeObject(p1);
os.writeObject(p2);
os.writeObject(p3);
os.close();

//反序列化
InputStream in = new FileInputStream(filePath);
oi = new ObjectInputStream(in);
p1 = (Person)oi.readObject();
p2 = (Person)oi.readObject();
p3 = (Person)oi.readObject();

System.out.println(p1);
System.out.println(p2);
System.out.println(p3);

}
}

//MARK:实现Serializable这个标记接口就可以将对象序列化了
class Person implements Serializable{
int age;
String name;
transient float height; // 如果transient修饰后的属性,反序列化的时候就会是默认值

Person(int age,String name,float height){
this.age = age;
this.name = name;
this.height = height;
}

public String toString(){
return "age:" + this.age + "name:" + this.name + "height:"+this.height;
}
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,497评论 18 399
  • tags:io categories:总结 date: 2017-03-28 22:49:50 不仅仅在JAVA领...
    行径行阅读 2,161评论 0 3
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,030评论 0 62
  • 初冬时节只适合回忆么?冷与暖,悲与喜,曾经经历的一切,只在弥漫的思绪里踯躅独行。 已经很久了,这种压抑,在...
    质感的故事阅读 373评论 0 1