`
piaolingluo
  • 浏览: 5778 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类

java中的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(),每次读取一行

 

分享到:
评论

相关推荐

    Java_IO完全总结

    Java IO系统是Java平台标准库中的一个重要组成部分,主要用于处理输入输出操作。Java IO系统主要包括两个包:`java.io`和`java.nio`(New IO),其中`java.io`提供了一系列基于流的I/O操作接口与实现类,而`java.nio...

    java中的IO操作总结(四)

    java中的IO操作总结(四) 前面已经把java io的主要操作讲完了 这一节我们来说说关于java io的其他内容 Serializable序列化 实例1:对象的序列化 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23...

    JAVAIO操作总结

    Java IO操作是Java编程中非常重要的一个部分,它主要用于数据的输入输出,包括从文件、网络、内存等来源获取数据,以及向这些目的地发送数据。本文将对Java IO中的节点流和处理流进行详细的总结。 首先,我们来看...

    java中的IO操作总结(一)

    java中的IO操作总结(一) 所谓IO,也就是Input与Output的缩写。在java中,IO涉及的范围比较大,这里主要讨论针对文件内容的读写 其他知识点将放置后续章节(我想,文章太长了,谁都没耐心翻到最后) 对于文件内容...

    Java_IO操作总结

    在Java中,I/O操作主要涉及到java.io包中的类和接口。这些类和接口的设计遵循了面向对象的原则,以接口和抽象类作为核心,具体的操作由其子类实现。 Java I/O的核心类包括: 1. File类:File类是用于操作文件和目录...

    java IO操作总结

    ### Java IO操作总结 Java IO(输入/输出)是Java编程语言中用于处理数据输入和输出的核心机制。本文档全面总结了Java IO的各种操作,旨在为开发者提供一个深入理解并熟练掌握Java IO技术的资源。 #### 一、临时...

    java_IO完全总结

    Java IO完全总结的知识点: 一、历史背景: 1. IO系统设计的困难性:对于编程语言设计人员来说,设计一个功能完善的输入输出系统是非常有挑战性的。需要考虑各种不同的因素,如文件、控制台、网络、内存等的读取方式...

    java io 操作总结

    在这篇总结中,我们将探讨Java IO操作的各个方面,包括File类、RandomAccessFile类、字节流与字符流的基本操作,以及具体实现文件读写的技术细节。 首先,File类在Java IO操作中扮演着重要角色。它提供了关于文件和...

    Java IO流 总结

    Java IO流总结 Java IO流是Java语言中最基本和最重要的输入/输出机制,负责将数据从外部世界输入到Java应用程序中或将数据从Java应用程序输出到外部世界。IO流可以分为两大类:字节流和字符流。 1. 节点流:离数据...

    《JAVA_IO流学习总结》

    总结来说,Java IO流是一个庞大的体系,覆盖了从基础的文件操作到复杂的网络通信,理解并熟练掌握这一部分将极大地提升Java开发者的技能。通过学习和实践,开发者可以灵活地处理各种数据输入输出场景,为应用程序...

    Java-Io流,练习

    为了提高IO操作的效率,Java提供了缓冲流,如`BufferedInputStream`和`BufferedOutputStream`,以及`BufferedReader`和`BufferedWriter`。这些类在内部维护了一个缓冲区,可以减少实际的物理I/O次数。 五、转换流...

    JAVA_IO操作总结——节点流和处理流.pdf

    ### JAVA IO操作总结——节点流和处理流 #### 一、概述 在Java中,输入/输出(Input/Output,简称IO)操作是一项非常重要的功能,它涉及到如何从不同的源读取数据以及如何向不同的目的地写入数据。Java IO体系主要...

    java流IO总结

    ### Java IO流详解 #### 一、概述 Java的I/O操作主要涉及使用Java语言进行输入和输出操作。Java的所有I/O机制都是基于数据流来进行输入输出,这些数据流表示了字符或字节数据的流动序列。理解Java的I/O模型对于...

    java.io.Reader 和 java.io.InputStream 的区别

    在深入探讨`java.io.Reader`与`java.io.InputStream`的具体差异之前,我们首先需要理解这两者在Java I/O操作中的基础角色。`java.io.Reader`和`java.io.InputStream`是Java标准库中处理输入数据的核心类,它们分别...

    JavaIO流详细总结

    下面是对Java IO流的详细总结: 1. 流的概念: 流是一种抽象的数据传输方式,可以将数据从一个地方传输到另一个地方。Java中的流分为输入流和输出流,分别用于读取和写入数据。流按照处理数据的不同类型,又可以...

    Java学习之IO总结及mina和netty

    传统的Java IO是阻塞的,即在进行IO操作时,程序会一直等待数据准备完成。而NIO引入了选择器(Selector)和通道(Channel)的概念,允许单线程同时处理多个连接,提高了服务器的并发能力。NIO的关键在于其非阻塞模式...

    java-IO框架图

    例如,javaio.bmp和javaio2.bmp可能是两张展示IO框架图的图片,其中详细描绘了不同类之间的继承关系和使用场景,帮助开发者更好地理解和掌握Java IO系统。 总结一下,Java IO框架是Java平台不可或缺的一部分,它为...

Global site tag (gtag.js) - Google Analytics