Java小记4

在前面的学习完成之后,我们已经可以实现许多操作了,本周呢,我们将对类的认识进一步加深,此外再介绍一下通过程序对文件的基本操作,即俗称的IO流。

目录

Java异常类简介

Java集合类简介

Java输入输出流与读写操作

I/O流简介

 具体使用


Java异常类简介

由于异常类的使用比较少,所以仅作简单介绍。

我们在编程的时候难免会出现错误,常见的错误有除0溢出、数组越界、未找到文件等。然而并不是错误都是致命的,致命错便是error,非致命错便是exception,也就是所谓的异常。在idea中便是通过下图的图标来表示的。

 实际上,Java中存在Exception类和Error类,他们都在java.long包里面,且是Throwable类的子类。不过通常只关心Exception类和它的子类。下面给出错误类和异常类的层次结构和常见异常类的列表。

 编译器会帮我们检查出一部分错误,检查不出的错误就值得引起我们重视,其中有一部分便可通过异常类发现,由于使用频率较低,所以感兴趣的可以自行了解。

Java集合类简介

 这里的集合和数学中一样,是一系列对象的聚集,代表一组数据对象的一个对象,每个对象也称为集合的元素,在Java中集合也可叫作容器。

Java中定义了一套完整的集合框架,具体包括一组接口、抽象类和具体实现类。不过这些接口和类数目众多,彼此之间的关系也很复杂。

Collection是Java 集合框架的跟接口,它定义了各种集合的最大共性。主要方法如下图。

 其余的,感兴趣的自行学习吧。

Java输入输出流与读写操作

I/O流简介

输入输出是计算机系统和外界交换信息的途径,在Java中通过“流”实现。在C++中同样有IO流,不过C++中的IO流与Java中不太一样。下面仅介绍Java中的I/O流。Java中的I/O体系大致如下图。

 

 java.io包中定义了字节流的输入输出和字符流的输入输出4个抽象类,即上图所提到的InputStream(输入字节流类)、OutputStream(输出字节流类)、Reader(输入字符流类)、Writer(输出字符流类)。

接下来先对这四个类和各自子类的关系以及常用到的方法进行列举,再具体说明。

1.InputStream(输入字节流类)

 

 2.OutputStream(输出字节流类)

 

 

3.Reader(输入字符流类)

 

 

4.Writer(输出字符流类)

 

 具体使用

根据前面的知识,抽象类的实例化必须通过他的子类来实现。此外,要在程序中实现对文件的编辑,就必须给出文件的路径,这里就需要File类(文件类)。

File类

File类有3种常用的构造方法

(1)File(String pathname)                        //pathname是文件路径和文件名

(2)File(String dir,String filename)           //dir是父路径,filename是文件名

(3)File(File dir,String filename)               //dir是父路径File对象,filename是文件名

import java.io.File;
public class IO {
    public static void main(String[] args) {
        String pathname = "D:\\编程及相关\\java\\java-1\\abc.txt";
        File f1 = new File(pathname);
        System.out.println("文件是否存在" + f1.exists());
        System.out.println("文件名称:" + f1.getName());
        System.out.println("文件的相对路径:" + f1.getPath());
        System.out.println("文件的绝对路径:" + f1.getAbsolutePath());
        System.out.println("文件可读性:" + f1.canRead());
        System.out.println("文件可写性:" + f1.canWrite());
        System.out.println("文件大小:" + f1.length());
    }
}

上面所用到的方法是File中的常用方法,可自行查阅。

上面程序的运行结果如下

文件是否存在true
文件名称:abc.txt
文件的相对路径:D:\编程及相关\java\java-1\abc.txt
文件的绝对路径:D:\编程及相关\java\java-1\abc.txt
文件可读性:true
文件可写性:true
文件大小:0

输入输出

在键盘输入、显示器显示信息,通常称为标准输入输出或者控制台输入输出。Java 语言在键盘输入、显示器显示信息,通常称为标准输入输出或者控制台输入输出.Java语言专门提供了Java.lang.System类中的对象实现标准输入和输出。 

(1) System.out: 标准输出流对象,默认为显示器,它是PrintStream类的对象。 
(2) System.in: 标准输入流对象,默认为键盘,它是InputStream 类的对象。 
(3) System.er: 标准错误输出流对象,默认为显示器,是PrintStream类的对象。 

在前面,我们通过Scanner类来实现输入,在这里也可以通过Scanner来从文件中获取数据。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ScannerFileTest {
    public static void main(String[] args) throws FileNotFoundException {
        String s1,s2,s3,s4;
        File f = new File("D:\\编程及相关\\java\\java-1\\abc.txt");
        Scanner sc = new Scanner(f);
        s1 = sc.next();
        s2 = sc.next();
        s3 = sc.next();
        s4 = sc.next();
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
        System.out.println(s4);
    }
}

这里s1到s4分别以字符串的形式保存了文件中第一行到第四行的内容。这里要保证文件非空,不然会无法运行。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class ScannerFileTest {
    public static void main(String[] args) throws IOException {
        String s1,s2,s3,s4,xm;
        int c1,c2,c3,zcj;
        File f = new File("D:\\编程及相关\\java\\java-1\\abc.txt");
        Scanner sc = new Scanner(f);
        s1 = sc.next();
        s2 = sc.next();
        s3 = sc.next();
        s4 = sc.next();
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
        System.out.println(s4);
        String dir = "D:\\编程及相关\\java\\java-1";
        String fileName = "def.txt";
        File f1 = new File(dir,fileName);
        boolean b1 = f1.createNewFile();
        PrintWriter pw1 = new PrintWriter(f1);
        pw1.println(s1);
        pw1.println(s2);
        pw1.println(s3);
        pw1.println(s4);
        pw1.close();
        PrintWriter pw2 = new PrintWriter(System.out);
        pw2.println("---------");
        pw2.println(s1);
        pw2.println(s2);
        pw2.println(s3);
        pw2.println(s4);
        pw2.println("---------");
        pw2.close();
    }
}

这里通过PrintWriter类分别实现了写入文件和系统输出。

通过这个,基本对文件的读写就可以实现,不过对文件的读写当然不止这个,还有其他,那就接下来再慢慢学吧,我们下周再见。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Protobuf是一种高效的序列化协议,可以用于数据交换和数据存储。它的主要优势是大小小,速度快,可扩展性强。下面是使用Protobuf的一些小记: 1. 定义消息格式 首先,需要定义消息格式,以便Protobuf可以将数据序列化和反序列化。消息格式定义在.proto文件中,使用protobuf语言编写。例如,下面是一个简单的消息格式定义: ``` syntax = "proto3"; message Person { string name = 1; int32 age = 2; } ``` 这个消息格式定义了一个名为Person的消息,包含两个字段:name和age。 2. 生成代码 一旦消息格式定义好,就可以使用Protobuf编译器生成代码。编译器将根据消息格式定义生成相应的代码,包括消息类、序列化和反序列化方法等。可以使用以下命令生成代码: ``` protoc --java_out=. message.proto ``` 这将生成一个名为message.pb.javaJava类,该类包含Person消息的定义以及相关方法。 3. 序列化和反序列化 一旦生成了代码,就可以使用Protobuf序列化和反序列化数据。例如,下面是一个示例代码,将一个Person对象序列化为字节数组,并将其反序列化为另一个Person对象: ``` Person person = Person.newBuilder() .setName("Alice") .setAge(25) .build(); byte[] bytes = person.toByteArray(); Person deserializedPerson = Person.parseFrom(bytes); ``` 这个示例代码创建了一个Person对象,将其序列化为字节数组,然后将其反序列化为另一个Person对象。在这个过程中,Protobuf使用生成的代码执行序列化和反序列化操作。 以上是使用Protobuf的一些基本步骤和注意事项,希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值