javaIO流

1.java.io包下

File类:java程序中的此类的一个对象,就对应着硬盘中的一个文件或网络中的一个资源。

File file1 = new File(“d:\io\helloworld.txt”);

File file2 = new File(“d:\io\io1”);

1.File既可以表示一个文件(.doc .xls .mp3 .avi .jpg .dat),也可以表示一个文件目录!

2.File类的对象是与平台无关的。

3.File类针对于文件或文件目录,只能进行新建、删除、重命名、上层目录等等的操作。如果涉及到访问文件的内容,File

是无能为力的,只能使用IO流下提供的相应的输入输出流来实现。

4.常把File类的对象作为形参传递给相应的输入输出流的构造器中!

/*

*File:是文件和目录的一种抽象的表示;

*File:操作文件的一些属性:文件名,文件目录,文件大小,文件修改时间等。

*File file=new File(“e:\test.txt”);

*“e:\test.txt”:可能是单个文件,也可能是目录;

*

两种写法:

*File file=new File(“e:\a\b\c\test.txt”);

*File file=new File(“e:/a/b/c/test.txt”);

*

*/

public class Test {

  public static void main(String[] args) {


          File file=new File("e:\\test.txt");


          System.out.println(file.exists());//文件是否存在;

          System.out.println(file.isDirectory());//是目录吗;

          System.out.println(file.isFile());//是单个文件吗;

          System.out.println(file);//文件全路径信息;

          System.out.println(file.getName());//只显示文件名信息,不包含路径信息;

          System.out.println(file.getAbsolutePath());//文件全路径信息;

          System.out.println(file.lastModified());//文件最后修改时间,毫秒值;

          System.out.println(new Date(file.lastModified()).toLocaleString());//文件最后修改时间,毫秒值;));//文件最后修改时间,毫秒值;

          System.out.println(file.length());//只显示文件名信息,不包含路径信息;

  }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

}

/*

*file.renameTo(new File(“e:\d\a.txt”)):相当于移动和重命名文件;

*条件:上层目录要给准备好。

包装类*4.包装类相比于其它类,有一个显著的特点:

自动装箱和自动拆箱

Integer n3=1234;//自动装箱;基本数据类型—>引用数据类型;隐式调用Integer n3=new Integer(1234);

int i=n3+10;//自动拆箱;引用数据类型—>基本数据类型;隐式调用n3.intValue();

//Integer和字符串类型的相互转换;

String str=“123”;//字符串必须是数字格式的,否则会报异常: java.lang.NumberFormatException。

int a=Integer.parseInt(str);

System.out.println(a+10);

  int b=98;

  String str1=String.valueOf(b);

  System.out.println(str1);       

*StringBuffer和StringBuilder:

1

2

3

4

*1.方法相同,可以替换;

*2.StringBuffer早期版本的,StringBuilder后来版本的(jdk1.5);

*3.StringBuffer重安全,轻效率;StringBuilder重效率,轻安全;

StringBuffer:synchronized,线程同步;

StringBuilder:没有synchronized,线程非同步;

*4.建议用StringBuilder。

2.IO 流的结构

在这里插入代码片

1

3.IO流的划分

按照流的流向的不同:输入流 输出流 (站位于程序的角度)

按照流中的数据单位的不同:字节流 字符流 (纯文本文件使用字符流 ,除此之外使用字节流)

InputSterame outputSterame

InputStreamReader和OutputStreamWriter

思路:先把文件从硬盘读到程序里,再从程序里写出到另一个文件。

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

public class TestCopy {

      public static void main(String[] args) throws IOException {


              //1.指定数据源;

              File file=new File("e:/a.txt");


              //2.搭建输入流管道;

              InputStream is=new FileInputStream(file);


              //3.指定目的地;

              File file1=new File("e:/b.txt");


              //4.搭建输出管道;

              OutputStream os=new FileOutputStream(file1);


              //5.用管道功能;

              int b=0;


              //边读边写;

              while((b=is.read())!=-1){


                      os.write(b);

              }


              //6.关闭流;

              is.close();

              os.close();

      }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

reader writer

BufferedReader和BufferedWriter

/*

*输出流: close();1.关闭流;2.刷新缓冲区;

*      flush();刷新缓冲区;

*     

*

*

*/

public class TestCopy {

      public static void main(String[] args) throws IOException {


              File file=new File("e:/a.txt");

              Reader reader=new FileReader(file);


              File file1=new File("e:/b.txt");

              Writer writer=new FileWriter(file1);


              char[] cbuf=new char[4];

              int len=0;

              while((len=reader.read(cbuf))!=-1){

                      writer.write(cbuf, 0, len);

              }


              writer.flush();


              reader.close();

              writer.close();


      }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

按照流的角色的不同:节点流 处理流 (流直接作用于文件上是节点流(4个),除此之外都是处理流)

4.重点掌握

抽象基类节点流(文件流) 缓冲流(处理流的一种,可以提升文件操作的效率)

InputStream FileInputStream (int read(byte[] b)) BufferedInputStream (int read(byte[] b))

OutputStreamFileOutputStream (void write(b,0,len)) BufferedOutputStream (flush()) (void write(b,0,len))

ReaderFileReader (int read(char[] c)) BufferedReader (readLine()) (int read(char[] c))或String readLine()

WriterFileWriter (void write(c,0,len))BufferedWriter (flush()) (void write(c,0,len)或void write(String str))

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

public class TestCopy2 {

      public static void main(String[] args) throws IOException {


              //创建数据源;

              File file=new File("e:/1.jpg");


              //搭建管道;

              InputStream is=new FileInputStream(file);

              BufferedInputStream bis=new BufferedInputStream(is);


              //创建数据源;

              File file1=new File("e:/2.jpg");


              //搭建管道;

              OutputStream os=new FileOutputStream(file1);

              BufferedOutputStream bos=new BufferedOutputStream(os);

              //边读边写;

              int b=0;

              long startTime=System.currentTimeMillis();

              while((b=bis.read())!=-1){

                      bos.write(b);


              }

              long endTime=System.currentTimeMillis();

              System.out.println(endTime-startTime);

              bis.close();

              bos.close();

      }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

注: 1.从硬盘中读入一个文件,要求此文件一定得存在。若不存在,报FileNotFoundException的异常

  2.从程序中输出一个文件到硬盘,此文件可以不存在。若不存在,就创建一个实现输出。若存在,则将已存在的文件覆盖

  3.真正开发时,就使用缓冲流来代替节点流

  4.主要最后要关闭相应的流。先关闭输出流,再关闭输入流。将此操作放入finally

1

2

3

4

5

5.其它的流

1.转换流:实现字节流与字符流之间的转换

InputStreamReader:输入时,实现字节流到字符流的转换,提高操作的效率(前提是,数据是文本文件)  ===>解码:字节数组--->字符串

OutputStreamWriter:输出时,实现字符流到字节流的转换。 ===>编码:  字符串---->字节数组

1

2

3

例子:从键盘输入字符串,要求将读取到的整行字符串转成大写输出。然后继续进行输入操作,直至当输入“e”或者“exit”时,退出程序。

2.标准的输入输出流

System.in: The "standard" input stream:从键盘输入数据

System.out:The "standard" output stream:从显示器输出数据

1

2

3

3.打印流 (都是输出流) PrintStream(处理字节) PrintWriter(处理字符)

可以使用System.setOut(PrintStream p)重新设置一下输出的位置。

PrintStream p = new PrintStream(new FileOutputStream(“hello.txt”),true);

4.数据流(处理基本数据类型、String类、字节数组)(了解即可)

DataInputStream DataOutputStream

5.对象流(用来处理对象的)

>对象的序列化机制:允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,

    或通过网络将这种二进制流传输到另一个网络节点。当其它程序获取了这种二进制流,就可以恢复成原来的Java对象

1

2

3

ObjectInputStream(Object readObject();)

ObjectOutputStream (void writeObject(Object obj))

如何创建流的对象:

1

ObjectOutputStream oos =

new ObjectOutputStream(new FileOutputStream(new File(“person.txt”)));

ObjectInputStream ois =

new ObjectInputStream(new FileInputStream(new File(“person.txt”)));

实现序列化机制的对象对应的类的要求:

1

①要求类要实现Serializable接口

②同样要求类的所有属性也必须实现Serializable接口

③ 要求给类提供一个序列版本号:private static final long serialVersionUID;

④属性声明为static 或transient的,不可以实现序列化

/*

*1.User类就实现Serializable接口—》可以以二进制流的形式写入硬盘—》序列化;

从硬盘上读出来,把二进制流还原成对象信息—》反序列化;

否则会报错:;;;;;;;;;;;;;;

java.io.NotSerializableException: com.sxt.io.objectio.User

*/

public class User implements Serializable {

  private String userName;

  private String password;


  public User() {

          // TODO Auto-generated constructor stub

  }

  public User(String userName, String password) {

          super();

          this.userName = userName;

          this.password = password;

  }

  public String getUserName() {

          return userName;

  }

  public void setUserName(String userName) {

          this.userName = userName;

  }

  public String getPassword() {

          return password;

  }

  public void setPassword(String password) {

          this.password = password;

  }

  @Override

  public String toString() {

          return "User [userName=" + userName + ", password=" + password + "]";

  }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

}

// 写到文件里

public class TestObjectOutputStream {

      public static void main(String[] args) throws IOException {


              File file=new File("e:/f.data");

              OutputStream os=new FileOutputStream(file);

              ObjectOutputStream oos=new ObjectOutputStream(os);


              User user=new User("Ada","123456");

              oos.writeObject(user);


              oos.close();

      }

}

//读进来;

public class TestObjectInputStream {

      public static void main(String[] args) throws IOException, ClassNotFoundException {


              File file=new File("e:/f.data");

              InputStream is=new FileInputStream(file);

              ObjectInputStream ois=new ObjectInputStream(is);


              User user=(User)ois.readObject();


              ois.close();

              System.out.println(user);


      }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

6.随机存取文件流:RandomAccessFile

  6.1既可以充当一个输入流,又可以充当一个输出流:public RandomAccessFile(File file, String mode)

  6.2支持从文件的开头读取、写入。若输出的文件不存在,直接创建。若存在,则是对原有文件内容的覆盖。

  6.3 支持任意位置的“插入”。

1

2

3

4

5

/*

*基本数据类型包装流:写进去是什么类型,读出来就是什么类型;保持的是数据类型不变。

*

*1.一定是先写后读;

*  DataOutputStream:写;

*  DataInputStream:读;

*2.读写顺序要一致;否则会出错或数据错误;java.io.EOFException,end of file;

*/

public class Test {

      public static void main(String[] args) throws IOException {


              File file=new File("e:/f.data");

              OutputStream os=new FileOutputStream(file);

              DataOutputStream dos=new DataOutputStream(os);


              int n=5;

              dos.writeInt(n);

              dos.writeDouble(3.14);

              dos.writeBoolean(true);

              dos.writeUTF("战狼2");



              InputStream is=new FileInputStream(file);

              DataInputStream dis=new DataInputStream(is);


              int n1=dis.readInt();

              double d1=dis.readDouble();

              boolean b1=dis.readBoolean();

              String str1=dis.readUTF();


              System.out.println(n1);

              System.out.println(d1);

              System.out.println(b1);

              System.out.println(str1);


              dis.close();

              dos.close();


      }

}

---------------------

作者:閫嗛

来源:CSDN

原文:https://blog.csdn.net/weixin_44701192/article/details/93653916

版权声明:本文为博主原创文章,转载请附上博文链接!

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

推荐阅读更多精彩内容