Java-字节输入输出。(新手用于记录每天的作业)

本文介绍了一种使用Java实现文件复制的方法,通过四种不同的字节流操作方式:单字节读写、字节数组读写、带缓冲的单字节读写及带缓冲的字节数组读写。每种方法都提供了完整的代码示例。

Java-字节输入输出。(新手用于记录每天的作业)


参考手册:


 

BufferedInputStream

 


BufferedOutputStream

 


 

 


实例:

import java.io.*;
/*
 *  文件的复制方式
 *  1 字节流读写单个字节
 *  2 字节流读写字节数组
 *  3 字节流缓冲区 读写单个字节
 *  4 字节流缓冲区读写字节数组
 */
public class Zjsrsclx {
    public static void main(String[] args) throws Exception {
        long e = System.currentTimeMillis();
        File src = new File("D:\\ja.txt");
        File dasc = new File("C:\\ja.txt");
        long c = System.currentTimeMillis();
        System.out.println(e-c);
        lx4(src,dasc);
    }

    private static void lx4(File src, File dasc) throws Exception {
        // 4 字节流缓冲区读写字节数组
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dasc));
        byte[] b = new byte[1024*10];
        int len = 0;
        while((len = bis.read(b))!=-1){
            bos.write(b,0,len);
        }
        bis.close();
        bos.close();
    }

    private static void lx3(File src, File dasc) throws Exception {
        //3 字节流缓冲区 读写单个字节
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dasc));
        int len = 0;
        while((len = bis.read())!=-1){
            bos.write(len);
        }
        bis.close();
        bos.close();
    }

    private static void lx2(File src, File dasc) throws Exception {
        //2 字节流读写字节数组
        FileInputStream fis = new FileInputStream(src);
        FileOutputStream fos = new FileOutputStream(dasc);
        int len = 0;
        byte[] b = new byte[1024*10];
        while ((len = fis.read(b))!=-1){
            fos.write(b,0,len);
        }
        fis.close();
        fos.close();
    }

    private static void lx1(File src,File dasc) throws Exception {
        //1 字节流读写单个字节
        //复制粘贴文件。
        FileInputStream fis = new FileInputStream(src);
        FileOutputStream fos = new FileOutputStream(dasc);

        int len = 0;
        while ((len = fis.read())!=-1){
           fos.write(len);
        }
        fis.close();
        fos.close();
    }

}

 


打印结果:


lx1:


lx2:


lx3:


lx4:

 

posted @ 2019-03-26 18:21 浪子。 阅读( ...) 评论( ...) 编辑 收藏
<think>好的,用户之前问过关于Java中右移和无符号右移的区别,现在他们又问如何在Java中进行输入输出。看起来他们可能在学习Java的基础知识,尤其是操作符之后,现在转向了基本的I/O操作。我需要确定他们的知识水平,可能是个刚开始学Java新手,所以需要解释得清楚一些。 首先,用户的问题比较广泛,输入输出涉及很多方面,比如控制台输入输出、文件读写、甚至网络I/O。但作为基础,通常控制台和文件是重点。我应该先覆盖最常见的场景,比如使用Scanner和System.out.println,然后提到文件读写,使用FileReader、FileWriter或者Java NIO的Files类。可能用户需要具体的代码示例,这样他们可以快速上手。 另外,用户之前的问题是关于位运算,现在转向I/O,可能是在学习不同的Java基础知识模块。需要确保回答结构清晰,分点说明,每个部分有示例代码,这样用户容易理解。 要注意的是,Java输入输出有不同的类和方法,对于新手来说可能会混淆,比如Scanner和BufferedReader的区别,或者何时使用字节流和字符流。我需要简单解释这些类的用途,但不过于深入,避免让用户感到困惑。同时,提示异常处理的重要性,比如try-with-resources,这样用户知道正确的做法。 用户可能没有明确说明是控制台还是文件I/O,但作为基础,控制台输入输出是必须的,文件操作也是常见需求。另外,Java 7之后的NIO Files类可能更简洁,可以适当提及。同时,提醒用户注意关闭资源,避免资源泄漏。 最后,确保回答准确,示例代码正确,并且涵盖主要的使用场景。检查是否有常见的错误,比如忘记导入包,或者异常处理不完整。用简洁的语言和例子帮助用户快速掌握Java输入输出方法。</think>在 Java 中,输入输出(I/O)操作主要通过标准库中的 `java.io` 和 `java.nio` 包实现。以下是 **控制台输入输出** 和 **文件输入输出** 的核心方法及示例: --- ### 一、**控制台输入输出** #### 1. **输出到控制台** - **`System.out`**:标准输出流,常用方法: ```java System.out.print("Hello"); // 不换行输出 System.out.println("World"); // 换行输出 System.out.printf("PI = %.2f", 3.1415); // 格式化输出(输出:PI = 3.14) ``` #### 2. **从控制台输入** - **`Scanner` 类**:最常用的输入工具(需导入 `java.util.Scanner`): ```java import java.util.Scanner; public class ConsoleInput { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个整数:"); int num = scanner.nextInt(); // 读取整数 System.out.print("请输入字符串:"); String str = scanner.next(); // 读取单词(空格分隔) scanner.nextLine(); // 清空缓冲区(避免后续读取错误) System.out.print("请输入一行文本:"); String line = scanner.nextLine(); // 读取整行文本 scanner.close(); // 关闭 Scanner } } ``` - **`BufferedReader` 类**:高效读取文本(需处理 `IOException`): ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class ConsoleInputBuffered { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); System.out.print("请输入内容:"); String input = reader.readLine(); // 读取整行 System.out.println("输入的内容是:" + input); reader.close(); } } ``` --- ### 二、**文件输入输出** #### 1. **写入文件** - **`FileWriter`(字符流)**: ```java import java.io.FileWriter; import java.io.IOException; public class FileWriteExample { public static void main(String[] args) { try (FileWriter writer = new FileWriter("output.txt")) { // 自动关闭资源 writer.write("Hello, Java!\n"); // 写入内容 writer.append("第二行内容"); } catch (IOException e) { e.printStackTrace(); } } } ``` - **`Files` 工具类(Java NIO)**: ```java import java.nio.file.Files; import java.nio.file.Paths; import java.io.IOException; public class NioFileWrite { public static void main(String[] args) { try { String content = "Hello, Java NIO!"; Files.write(Paths.get("nio_output.txt"), content.getBytes()); } catch (IOException e) { e.printStackTrace(); } } } ``` #### 2. **读取文件** - **`FileReader` + `BufferedReader`**: ```java import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class FileReadExample { public static void main(String[] args) { try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"))) { String line; while ((line = reader.readLine()) != null) { // 逐行读取 System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } } } ``` - **`Files` 工具类(Java NIO)**: ```java import java.nio.file.Files; import java.nio.file.Paths; import java.io.IOException; import java.util.List; public class NioFileRead { public static void main(String[] args) { try { List<String> lines = Files.readAllLines(Paths.get("input.txt")); // 读取所有行 for (String line : lines) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } } } ``` --- ### 三、**关键注意事项** 1. **异常处理**:文件操作必须处理 `IOException`(建议使用 `try-with-resources` 自动关闭资源)。 2. **字节流 vs 字符流**: - 字节流:`FileInputStream`/`FileOutputStream`(处理二进制文件,如图片)。 - 字符流:`FileReader`/`FileWriter`(处理文本文件)。 3. **路径问题**:文件路径建议使用绝对路径(如 `Paths.get("C:/data/file.txt")`),或确保相对路径正确(相对于项目根目录)。 --- ### 四、**总结** | **场景** | **推荐方式** | 示例类/方法 | |----------------|-------------------------|-------------------------------| | 控制台输出 | `System.out` | `println`, `printf` | | 控制台输入 | `Scanner` 或 `BufferedReader` | `nextInt()`, `readLine()` | | 文件写入 | `FileWriter` 或 `Files` | `write()`, `append()` | | 文件读取 | `BufferedReader` 或 `Files` | `readLine()`, `readAllLines()` | 通过上述方法,可以灵活实现 Java 中常见的输入输出操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值