I/O流操做总结(三)

说实话,其实我并不是很喜欢Java这门语言,尽管它很强大,有很多现成的API可以调用

但我总感觉它把简单的事情弄得太过复杂,甚至有时候会让人迷失

弄不清到底是为了写出东西,还是为了语言本身

我学习的第一门编程语言是Python,虽然学的不深

但是它的简单优雅至今令人难忘(呃,其实也就两年前的事……)

我接触的第二门语言是C,它给我的感觉是一种纯粹,一种高效的灵活

而不是类似java,写一堆含糊的代码来实现一个小小的功能

坦白讲,如果一个人在学习自己不感兴趣的东西,那会很累

支撑我的是,我对移动开发有着异常的向往,对Android也相当喜欢,无奈开发Android的主要语言便是Java

虽然已经学了半年,但是我却到现在都不能解释神马企业级开发到底有哪些东西

我想要的,无非就是把编程当作生活中的一种调情,如果想要某个功能,就去实现,用尽可能简单的方式

甚至我的猜想是,等到日后发展,编程这门技术如同每个人使用office一般的时候

那么作为程序员的你们是该有多艰辛?

要知道,一个人将自己内心的利益盖过真正的想法,这是相当可怕的……

因此,每个人都应该用自己喜欢的,觉得高效的方式,做自己最想要做的

好了,说了那么多,我的目的其实只有一个

难道我会告诉你,我根本就搞不懂,也不想搞懂java那些复杂的垃圾语法么?

我只用那些最简单最好用的东西……

java以前的那些io写法我就懒得记录了,主要是System类对IO的支持

如果你觉得我写的代码不够深沉,那你就喷吧,可喷完之后你还能干些什么呢?

现在,步入正题……

这一节我们来讲Scanner类和PrintWriter类的用法

Scanner类

实例1:从键盘读取


1

2

3

4

5

6

7

8

9

10

import java.util.Scanner;

public class Demo {

    public static void main(String[] args ) {

        Scanner input = new Scanner(System.in);    

        System.out.println("请输出一个整数:");

        int i = input.nextInt();

        System.out.println("你输入的整数是:" + i);

    }

}

以上演示的只是读取一个整数,当然还有读取浮点数和其他数据类型的方法,比较简单,查看API即可

实例2:从字符串读取


1

2

3

4

5

6

7

8

9

10

11

12

13

14

import java.util.Scanner;

public class Demo {

    public static void main(String[] args ) {

        //这里的\r\n是换行符,Linux下其实只用\n即可

        Scanner input = new Scanner("hello\r\nworld\r\n");

        //循环读取,hasNext()方法和集合框架里面的一样使

        while(input.hasNext()) {

            //每次读取一行,别的读取方法见API,比较简单

            String s = input.nextLine();

            System.out.println(s);

        }  

    }

}

实例3:从文件读取


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

import java.io.File;

import java.io.FileNotFoundException;

import java.util.Scanner;

public class Demo {

    public static void main(String[] args ) {

        String path = File.separator + "home" + File.separator + "siu" +

                      File.separator + "work" + File.separator + "demo.txt";

        

        File f = new File(path);

        Scanner input = null;

        try {

            //从文件构造Scanner对象,有可能产生异常

            input = new Scanner(f);

            while(input.hasNext()) {

                String s = input.nextLine();

                System.out.println(s);

            }

        catch (FileNotFoundException e) {

            e.printStackTrace();

        finally {

            input.close();

        }  

    }

}

这里要注意的是,从文件创建Scanner对象得先要有File对象,当然你可以使用匿名对象来创建

此外,还需捕捉异常和关闭文件流

PrintWriter类

实例4:向文件写入内容


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

import java.io.File;

import java.io.FileNotFoundException;

import java.io.PrintWriter;

public class Demo {

    public static void main(String[] args) {

        String path = File.separator + "home" + File.separator + "siu" +

                      File.separator + "work" + File.separator + "demo.txt";

        

        //创建文件对象

        File file = new File(path);

        

        PrintWriter p = null;

        try {

            //此处构造函数还可以传其他对象,具体参考API文档

            p = new PrintWriter(file);

            

            //向文件写入一行,此外还有print()和printf()方法

            p.println("如果有一天我回到从前");

            p.println("回到最原始的我");

            p.println("你是否会觉得我不错");

            

            //刷新流

            p.flush();

        catch (FileNotFoundException e) {

            e.printStackTrace();

        finally {

            p.close();

        }  

    }

}

与PrintWriter类似的还有一个PrintStream类,此处以PrintWriter举例是因为文本文件具有人为可读性

而二进制文件(字节模式)则需要使用专门的程序来读取

可能有人会问:FileOutputStream、 FileWriter都能写文件,那么为何还需要PrintWriter和PrintStream类

如果细看API文档,可以知道前者单纯的字符写入流和字节写入流操作的方式大多用数组进行

对文件的细化处理非常不方便,而PrintWriter和PrintStream则很好的解决了这一问题,提供print()等方法

并且,PrintWriter和PrintStream对于不存在文件对象的情况下会直接创建,如果已有文件对象

它们则会把原有文件给覆盖掉,却没有增加方法

解决这问题也很简单,再看API文档

PrintWriter有一个构造方法PrintWriter(Writer out),也就是能够传入Writer对象

PrintStream有一个构造方法PrintStream(OutputStream out),也就是能传入OutputStream对象

因此,我们这样写就可以了

new PrintWriter(new FileWriter(file,true))

new PrintStream(new FileOutputStream(file,true))

既能增加数据,也能更高效的处理文件,见如下代码示范

实例5:实现PrintWriter的数据追加功能


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

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.io.PrintWriter;

public class Demo {

    public static void main(String[] args) {

        String path = File.separator + "home" + File.separator + "siu" +

                      File.separator + "work" + File.separator + "demo.txt";

        

        //创建文件对象

        File file = new File(path);

        PrintWriter p = null;

        try {

            //利用FileWriter方式构建PrintWriter对象,实现追加

            p = new PrintWriter(new FileWriter(file,true));

            p.println("尼玛 这一句就是追加的 看到没");

            

            p.flush();

        catch (IOException e) {

            e.printStackTrace();

        finally {

            //我们来小心翼翼的关闭流,好吧^_^

            p.close();

        }

    }

}

看,这样就能实现追加效果了,最后一行便是

System类对IO的支持

实例6:System类中的写入


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

import java.io.IOException;

import java.io.OutputStream;

public class Demo {

    public static void main(String[] args) {

        //别忘了,OutputStream是所有字节写入流的父类

        OutputStream out = System.out;

        try {

            //写入数据,只能是数组,所以用getBytes()方法

            out.write("Hello,bitch!\r\n".getBytes());

        catch (IOException e) {

            e.printStackTrace();

        }

    }

}

注意,此处正好印证了System.out的覆写行为

如果想学好io,整个io体系中的多态需要了解清楚才能驾轻就熟

实例7:System类中的读取


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

import java.io.IOException;

import java.io.InputStream;

public class Demo {

    public static void main(String[] args) {

        //别忘了InputStream是所有字节输入流的父类

        InputStream in = System.in;

        System.out.print("请输入文字: ");

        byte[] buf = new byte[1024];

        int len = 0;

        try {

            //将输入的数据保证到数组中,len记录输入的长度

            len = in.read(buf);

        catch (IOException e) {

            e.printStackTrace();

        }

        //用字符串的方式打印数组中的数据

        System.out.println("你的输入是: " new String(buf,0,len));

    }

}

看,这样就能从键盘获取内容并且打印了

需要注意的是,这里的数组大小是1024字节

一旦输入的数据超过1024字节,那么超过的内容将被截取掉,所以此程序有局限性

并且,一个中文占两个字节,输入中文有时候会被意外截取掉

相信我,每个程序都是俺亲自编写编译的~!!!

实例8:利用BufferedReader实现对键盘的读取


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

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

public class Demo {

    public static void main(String[] args) {

        BufferedReader b = new BufferedReader(new InputStreamReader(System.in));

        System.out.print("请输入文本:");

        try {

            String str = b.readLine();

            System.out.println("你输入的是:" + str);

        catch (IOException e) {

            e.printStackTrace();

        }

        

        //循环读取方式

        /*

        while(true) {

            System.out.print("请输入文本:");

            String str = null;

            try {

                str = b.readLine();

            } catch (IOException e) {

                e.printStackTrace();

            }

            //如果输入over就结束循环

            if("over".equals(str)) {

                break;

            }

            System.out.println("你输入的是:" + str);

        }

        */

        

        try {

            //关闭流,不耐烦的就直接抛

            b.close();

        catch (IOException e) {

            e.printStackTrace();

        }

    }

}

这样做相对于上面一个方法的好处是:不用关心数组大小的问题

BufferedReader有一个最重要的方法就是readLine(),每次读取一行

时间: 2024-10-11 08:21:24

I/O流操做总结(三)的相关文章

年轻人默默做这三十件事,离成功就不远了

01 每天列出3件最重要的事 02 比别人早10分钟到公司 03 开口前先想几秒钟 04 发脾气之前先数30个数 05 不确定时,挑最难的事做 06 给每件事规定完成日期 07 坐第一排的位子 08 观察走在你前面的人 09 比别人多坚持10分钟 10 记住身边每个人的名字 11 抢着做事,即使是打扫卫生 12 在背后赞美别人 13 重视身边的每一个人 14 听别人把话说完 15 给别人的比别人期望的多一点 16 批评人之前,先进行赞美 17 随身带着纸和笔 18 醒后2分钟内记录梦的内容 19

expdb 操做方法

expdp system/oracle directory=DB_BAK dumpfile=zhzy.dmp schemas=zhzy expdp system/SYSTEM directory=DB_BAK dumpfile=sde__zyyh_zhzy.dmp schemas=(sde,zyyh,zhzy) logfile=expdp_all.log expdp system/SYSTEM directory=DB_BAK dumpfile=sde__zyyh_zhzy.dmp schema

文本操做小结

文本操做: 对文件操作流程: 1. 打开文件,得到文件句柄并赋值给一个变量 2. 通过句柄对文件进行操作 3. 关闭文件  data = open("file").read() print(data)  fs = open("yesterday","r", encoding="utf-8")         #fs即文件句柄 data = fs.read()          #从头开始一行一行读文件内容,然后指针到了最后. 

最大流 总结&&做题记录

最近一直很忙,为了节省时间,从今以后的题解会 一个专题 写一篇. 刷了一些题后,有了以下总结: 模型要点: 1.构造流量平衡,在满足流量平衡的情况下,找到要让什么最大. 2.一般用于判断性问题,即所有从源点流出的边满流(或者所有流入汇点的边满流).所以往往和二分答案结合起来使用. 3.如果答案假设为i+1的时候的图仅仅比假设答案为i的时候的图多了一些点或者边,那么可以在假设答案为i的图 跑过最大流后,加上相应的点和边,继续跑最大流.这样顺序枚举答案,避免了每次重新做最大流和重新构图,许多时候效率

【微商】笔记 - 引流操盘

微谷教育(广州)总经理 – 杨林 微商团队打造 品牌微电商化 性格微商 5年之后的微商会是什么样子? 电商被控制在天猫上(上会场)/电商可以引流,电商是做流量的生意!(有多少人还会买淘宝的9.9!) 微商是做人的生意!(信任,口碑营销) 为什么微商会起来,是因为互信时代的到来!(2017下半年) 你当前最大的困惑是什么? 1, 产品刚入市场,难于招代理! 产品卖给谁的? 微商对产品是有要求的! 微商不是营销,是吸销!(招代理不是招代理,而是吸代理!) 微商起盘需要造势,要懂得"秀"!

黄光裕出来后,首先会做这三件事(转)

5 月 14 日,“黄光裕概念股”三联商社.中关村.山东金泰全部涨停,港股国美电器涨幅超过5%,国美电器股价曾长期徘徊在 1 港元,但从 4 月开始连续上涨到目前的 2.4 港元,累计涨幅达到 114%. 一切都源于一则持续发酵的消息,黄光裕将于本月提前出狱.其实黄光裕将于 2015 年中提前出狱的消息从去年就开始流传,难以想象这轮股价上涨幕后没有推手,仅国美电器一支股票的涨幅就让黄光裕家族身价暴增 70 亿港元(约合 56.02 亿元人民币),大股东黄氏家族目前持有国美电器 32.4% 股权.

Java基础知识强化之IO流笔记62:三种方式实现键盘录入

1. 三种方式实现键盘录入     System.in 标准输入流.是从键盘获取数据的 键盘录入数据三种方式:  A:main方法的args接收参数.  java HelloWorld hello world java  B:Scanner(JDK5以后的)  Scanner sc = new Scanner(System.in);  String s = sc.nextLine();  int x = sc.nextInt()  C:通过字符缓冲流包装标准输入流实现  BufferedRead

ACM/ICPC 之 卡卡的矩阵旅行-最小费用最大流(可做模板)(POJ3422)

将每个点拆分成原点A与伪点B,A->B有两条单向路(邻接表实现时需要建立一条反向的空边,并保证环路费用和为0),一条残留容量为1,费用为本身的负值(便于计算最短路),另一条残留容量+∞,费用为0(保证可以多次通过该点,但费用只计算一次). 另外伪点B与原点右侧与下方的点有一条单向路(邻接表实现需要建立反向空边),残留容量为+∞,费用为0.源点0到点1有一条单向路,残留容量为K(可以通过K次),最后一个点的伪点2*n*n与汇点2*n*n+1有一条单向边,残留容量为K,两条边的费用都为0. 构图成功

女人再懒,出门都必须做这三件事!

有人会说了,整天在公司,很少与人交际,很多时候都是对着电脑,化妆与不化妆都是一样的 ? 这你就错了,化妆,穿衣,不仅仅是给别人看的,更重要的是为了自己的那份与众不同的气质. ? 世界上没有丑女人,只有懒女人.就算你再懒,出门之前也一定要做这几件事! 女人再懒也要打理自己,出门见人一定要化妆! ? 找到适合自己的妆容,或许就是简单的眉毛,或许就是简单的眼线,可以为你带来不一样的气色. 女人再懒也要打理自己,出门见人一定要有合适的发型! ? 当然不是说所有的人都去剪个短发什么的,必须要找到适合自己的