JavaIO

Java IO(输入/输出)是Java中处理数据流的核心机制,涵盖了从文件读取和写入到网络通信的各种功能。以下是一些Java IO的基本概念和使用方法:

1. Java IO的主要包

  • java.io:这是最常用的IO包,包含了用于文件和数据流操作的类。
  • java.nio:即“New IO”,提供了对NIO(非阻塞IO)的支持,主要用于高性能的数据处理。

2. 核心类

  • File:用于操作文件和目录的类,如创建、删除、重命名文件等。
  • InputStream 和 OutputStream:用于字节流的输入和输出操作,基类有各种具体实现,如 FileInputStreamFileOutputStream 等。
  • Reader 和 Writer:用于字符流的输入和输出操作,基类有各种具体实现,如 FileReaderFileWriter 等。
  • BufferedReader 和 BufferedWriter:用于缓冲字符流,提高读写效率。

3. 基本操作

文件操作
 

// 创建文件对象
File file = new File("example.txt");

// 判断文件是否存在
if (file.exists()) {
    System.out.println("File exists");
}

// 创建新文件
boolean created = file.createNewFile();
if (created) {
    System.out.println("File created successfully");
}
字节流操作
 
// 写入字节到文件
try (FileOutputStream fos = new FileOutputStream("output.txt")) {
    fos.write("Hello, World!".getBytes());
}

// 读取字节从文件
try (FileInputStream fis = new FileInputStream("output.txt")) {
    int content;
    while ((content = fis.read()) != -1) {
        System.out.print((char) content);
    }
}
字符流操作
 
// 写入字符到文件
try (FileWriter fw = new FileWriter("output.txt")) {
    fw.write("Hello, World!");
}

// 读取字符从文件
try (FileReader fr = new FileReader("output.txt")) {
    int content;
    while ((content = fr.read()) != -1) {
        System.out.print((char) content);
    }
}

4. 缓冲流

缓冲流可以显著提高读写效率:

 
// 使用 BufferedWriter 写入文件
try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
    bw.write("Hello, World!");
}

// 使用 BufferedReader 读取文件
try (BufferedReader br = new BufferedReader(new FileReader("output.txt"))) {
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }
}

5. 序列化

序列化是将对象转换为字节流的过程,用于持久化或在网络中传输。

 
// 序列化对象
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.dat"))) {
    oos.writeObject(new MyClass());
}

// 反序列化对象
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.dat"))) {
    MyClass obj = (MyClass) ois.readObject();
}

6. 异常处理

在IO操作中,异常处理非常重要,例如:

 
try {
    // IO操作
} catch (IOException e) {
    e.printStackTrace();
}

我们做一个简单的小项目:一个基本的图书管理系统。这个项目将展示如何使用Java进行文件读写、对象序列化、以及简单的命令行交互。

项目目标

创建一个简单的图书管理系统,用户可以添加图书、查看图书列表、以及保存和加载图书数据。图书信息包括标题、作者和出版年份。

项目结构

  1. Book - 表示一本图书的类。
  2. BookManager - 处理图书添加、显示和保存/加载操作的类。
  3. BookManagerApp - 提供用户界面的主应用程序类。

1. Book 类

这个类将表示一本图书,并实现 Serializable 接口以便对象可以被序列化。

 
import java.io.Serializable;

public class Book implements Serializable {
    private static final long serialVersionUID = 1L;

    private String title;
    private String author;
    private int year;

    public Book(String title, String author, int year) {
        this.title = title;
        this.author = author;
        this.year = year;
    }

    public String getTitle() {
        return title;
    }

    public String getAuthor() {
        return author;
    }

    public int getYear() {
        return year;
    }

    @Override
    public String toString() {
        return String.format("Title: %s, Author: %s, Year: %d", title, author, year);
    }
}

2. BookManager 类

这个类负责图书的管理,包括添加、显示、保存和加载图书。

 
import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class BookManager {
    private static final String FILE_NAME = "books.ser";
    private List<Book> books;

    public BookManager() {
        books = new ArrayList<>();
        loadBooks();
    }

    public void addBook(Book book) {
        books.add(book);
        saveBooks();
    }

    public void displayBooks() {
        if (books.isEmpty()) {
            System.out.println("No books available.");
        } else {
            for (Book book : books) {
                System.out.println(book);
            }
        }
    }

    private void saveBooks() {
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_NAME))) {
            oos.writeObject(books);
        } catch (IOException e) {
            System.err.println("Error saving books: " + e.getMessage());
        }
    }

    @SuppressWarnings("unchecked")
    private void loadBooks() {
        File file = new File(FILE_NAME);
        if (file.exists()) {
            try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file))) {
                books = (List<Book>) ois.readObject();
            } catch (IOException | ClassNotFoundException e) {
                System.err.println("Error loading books: " + e.getMessage());
            }
        }
    }
}

3. BookManagerApp 类

这是应用程序的主入口,提供简单的命令行界面来与用户交互。

 
import java.util.Scanner;

public class BookManagerApp {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        BookManager bookManager = new BookManager();

        while (true) {
            System.out.println("Book Manager");
            System.out.println("1. Add Book");
            System.out.println("2. View Books");
            System.out.println("3. Exit");
            System.out.print("Choose an option: ");

            int option = scanner.nextInt();
            scanner.nextLine();  // Consume newline

            switch (option) {
                case 1:
                    System.out.print("Enter title: ");
                    String title = scanner.nextLine();
                    System.out.print("Enter author: ");
                    String author = scanner.nextLine();
                    System.out.print("Enter year: ");
                    int year = scanner.nextInt();
                    scanner.nextLine();  // Consume newline

                    Book book = new Book(title, author, year);
                    bookManager.addBook(book);
                    System.out.println("Book added.");
                    break;

                case 2:
                    System.out.println("Books in Library:");
                    bookManager.displayBooks();
                    break;

                case 3:
                    System.out.println("Exiting...");
                    scanner.close();
                    return;

                default:
                    System.out.println("Invalid option. Please try again.");
            }
        }
    }
}

运行项目

  1. 编译代码:将每个类保存为一个 .java 文件,然后使用 javac 编译它们。
  2. 运行程序:使用 java BookManagerApp 运行主程序。

总结

这个小项目演示了如何使用Java进行基本的文件操作、对象序列化、以及简单的用户交互。你可以根据需要扩展这个项目,比如添加图书删除功能、图书搜索功能、或者提供更复杂的用户界面。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值