Java基础知识(6)- Java IO读写、Scanner类

 

1. Java IO读写

    Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。

    Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。

    一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。

    Java为I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。


    1) 读取控制台输入

        Java 的控制台输入由 System.in 完成。

        为了获得一个绑定到控制台的字符流,你可以把 System.in 包装在一个 BufferedReader 对象中来创建一个字符流。

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

        (1) 读取单个字符

            br.read();

        (2) 读取字符串

            br.readLine();


    2) 控制台输出

        在此前已经介绍过,控制台的输出由 print() 和 println() 完成。这些方法都由类 PrintStream 定义,System.out 是该类对象的一个引用。

        PrintStream 继承了 OutputStream 类,并且实现了方法 write()。这样,write() 也可以用来往控制台写操作。

        PrintStream 定义 write() 方法将 byteval 的低八位字节写到流中, 格式:

            int b = 'A';
            System.out.write(b);
            System.out.write('\n');

        注意:write() 方法不经常使用,因为 print() 和 println() 方法用起来更为方便。


    3) 读写文件

        这里讨论的两个重要的流是 FileInputStream 和 FileOutputStream

        (1) FileInputStream

            该流用于从文件读取数据,它的对象可以用关键字 new 来创建。

            可以使用字符串类型的文件名来创建一个输入流对象来读取文件:

                InputStream f = new FileInputStream("C:/java/hello");

            也可以使用一个文件对象来创建一个输入流对象来读取文件。我们首先得使用 File() 方法来创建一个文件对象:

                File f = new File("C:/java/hello");
                InputStream f = new FileInputStream(f);

            除了 InputStream 外,还有一些其他的输入流:ByteArrayInputStream、DataInputStream


        (2) FileOutputStream

            该类用来创建一个文件并向文件中写数据, 如果要打开的目标文件不存在,那么会创建该文件。

            有两个构造方法可以用来创建 FileOutputStream 对象。

            使用字符串类型的文件名来创建一个输出流对象:

                OutputStream f = new FileOutputStream("C:/java/hello")

            也可以使用一个文件对象来创建一个输出流来写文件。我们首先得使用 File() 方法来创建一个文件对象:

                File f = new File("C:/java/hello");
                OutputStream f = new FileOutputStream(f);

            除了 OutputStream 外,还有一些其他的输出流:ByteArrayOutputStream、DataOutputStream


        还有一些关于文件和 I/O 的类,我们也需要知道:File (类)、FileReader (类)、FileWriter (类)


    4) Java中的目录

        (1) 创建目录

            File 类中有两个方法可以用来创建文件夹:

            mkdir( ) 方法创建一个文件夹,成功则返回 true,失败则返回 false。失败表明 File 对象指定的路径已经存在,或者由于整个路径还不存在,该文件夹不能被创建。

            mkdirs( ) 方法创建一个文件夹和它的所有父文件夹。

            注意:Java 在 UNIX 和 Windows 自动按约定分辨文件路径分隔符。如果你在 Windows 版本的 Java 中使用分隔符(/) ,路径依然能够被正确解析。


        (2) 读取目录

            一个目录其实就是一个 File 对象,它包含其他文件和文件夹。

            如果创建一个 File 对象并且它是一个目录,那么调用 isDirectory( ) 方法会返回 true。

            可以通过调用该对象上的 list() 方法,来提取它包含的文件和文件夹的列表。


        (3) 删除目录或文件

            删除目录或文件

            删除文件可以使用 java.io.File.delete() 方法。

            以下代码会删除目录 /tmp/java/,需要注意的是当删除某一目录时,必须保证该目录下没有其他文件才能正确删除,否则将删除失败。

    实例:

复制代码
  1 import java.io.IOException;
  2 import java.io.BufferedReader;
  3 import java.io.InputStreamReader;
  4 import java.io.OutputStream;
  5 import java.io.FileOutputStream;
  6 import java.io.InputStream;
  7 import java.io.FileInputStream;
  8 import java.io.File;
  9 
 10 public class App {
 11     public static void main( String[] args ) {
 12 
 13         readChar();
 14 
 15         readString();
 16 
 17         fileOperation();
 18 
 19         folderOperation();
 20 
 21     }
 22 
 23     private static void readChar() {
 24 
 25         char c;
 26         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 27         System.out.println("输入单个或多个字符,按回车键 (输入 'q' 退出):");
 28 
 29         try {
 30             do {
 31                 c = (char) br.read();
 32                 //System.out.println(c);
 33 
 34                 // write() 方法不经常使用,因为 print() 和 println() 方法用起来更为方便
 35                 System.out.write(c);
 36                 System.out.write('\n');
 37 
 38             } while (c != 'q');
 39             System.out.println("");
 40         } catch (IOException e) {
 41             e.printStackTrace();
 42         }
 43 
 44     }
 45 
 46     private static void readString() {
 47 
 48         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 49         String str;
 50         System.out.println("输入字符串,按回车键(输入 'end' 退出):");
 51 
 52         try {
 53             do {
 54                 str = br.readLine();
 55                 System.out.println(str);
 56             } while(!str.equals("end"));
 57             System.out.println("");
 58         } catch (IOException e) {
 59             e.printStackTrace();
 60         }
 61 
 62     }
 63 
 64     private static void fileOperation() {
 65 
 66         try {
 67 
 68             String str = "Test FileOutputStream and FileInputStream";
 69             OutputStream os = new FileOutputStream("test.txt");
 70             os.write(str.getBytes());
 71             os.close();
 72 
 73             InputStream is = new FileInputStream("test.txt");
 74             StringBuffer sBuffer = new StringBuffer();
 75 
 76             int c = 0;
 77             while ( c != -1 ) {
 78                 c = is.read();
 79                 sBuffer.append((char) c);
 80             }
 81             System.out.println(sBuffer.toString());
 82 
 83         } catch (IOException e) {
 84             e.printStackTrace();
 85         }
 86     }
 87 
 88     private static void folderOperation() {
 89 
 90         String dirname = "/tmp";
 91         File f1 = new File(dirname);
 92         if (f1.isDirectory()) {
 93             System.out.println( "Directory of " + dirname);
 94             String s[] = f1.list();
 95             for (int i=0; i < s.length; i++) {
 96                 File f = new File(dirname + "/" + s[i]);
 97                 if (f.isDirectory()) {
 98                     System.out.println(s[i] + " is a folder");
 99                 } else {
100                     System.out.println(s[i] + " is a file ");
101                 }
102             }
103         } else {
104             System.out.println(dirname + " is not folder");
105         }
106 
107         dirname = "/tmp/test123";
108         File d = new File(dirname);
109         if (d.mkdirs()) {
110             System.out.println("Create folder '" + dirname + "' successfully");
111         } else {
112             System.out.println("Create folder '" + dirname + "' failed");
113         }
114 
115         if (d.delete()) {
116             System.out.println("Delete folder '" + dirname + "' successfully");
117         } else {
118             System.out.println("Delete folder '" + dirname + "' failed");
119         }
120 
121     }
122     
123 }
复制代码

    输出:

        输入单个或多个字符,按回车键 (输入 'q' 退出):
        a
        a


        q
        q

        输入字符串,按回车键(输入 'end' 退出):
        test
        test
        end
        end

        File write and read

        Directory of /tmp
        ...

        Create folder '/tmp/test123' successfully
        Delete folder '/tmp/test123' successfully


2. Scanner类

    java.util.Scanner是Java5的新特征,我们可以通过 Scanner 类来获取用户的输入。

        Scanner s = new Scanner(System.in);

    通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串。

    next():

        1)一定要读取到有效字符后才可以结束输入。
        2)对输入有效字符之前遇到的空白,next()方法会自动将其去掉。
        3)只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。

        next()不能得到带有空格的字符串。

    nextLine():

        1)以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。
        2)可以获得空白。

    如果要输入int或float类型的数据,在Scanner类中也有支持,但是在输入之前最好先使用 hasNextXxx() 方法进行验证,再使用 nextXxx() 来读取。

    实例:

复制代码
 1 import java.util.Scanner;
 2 
 3 public class App {
 4     public static void main( String[] args ) {
 5 
 6         Scanner scan = new Scanner(System.in);
 7         System.out.println("输入字符串:");
 8         if(scan.hasNextLine()){
 9             String str = scan.nextLine();
10             System.out.println("输入的字符串:" + str);
11         }
12 
13         int i = 0 ;
14         float f = 0.0f ;
15         System.out.print("输入整数:");
16         if (scan.hasNextInt()) {
17             i = scan.nextInt() ;
18             System.out.println("整数:" + i) ;
19         } else {
20             System.out.println("输入的不是整数!") ;
21         }
22 
23         System.out.print("输入浮点数:");
24         if (scan.hasNextFloat()) {
25             f = scan.nextFloat() ;
26             System.out.println("浮点数:" + f) ;
27         } else {
28             System.out.println("输入的不是浮点数!") ;
29         }
30 
31     }
32 }
复制代码

    输出:

        输入字符串:
        test123
        输入的字符串:test123
        输入整数:9
        整数:9
        输入浮点数:1
        浮点数:1.0


posted @   垄山小站  阅读(232)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
点击右上角即可分享
微信分享提示