Java_09 快速入门 Java IO编程

目录

第一章:Java IO编程

1.1  文件操作类:File

范例1-1:文件基本操作。任意给定一个文件路径,如果文件不存在则创建一个新的文件,如果文件存在则将文件删除。

范例1-2:创建带路径的文件。

范例1-3:取得文件或目录的信息。

范例1-4:列出目录信息。

范例1-5:列出指定目录下的所有文件及子目录信息。在每一个目录中有可能还会存在其他子目录,并且还可能有更深层次的子目录,所以为了可以列出所有的内容,应该判断每一个给定的路径是否是目录。如果是目录则应该继续列出,这样的操作最好使用递归的方式完成。

正在上传…重新上传取消1.2  字节流与字符流

范例1-6:自动执行close()操作。

范例1-7:文件内容的输出。

范例1-8:文件追加。

范例1-9:采用单个字节的方式输出(此处可以利用循环操作输出全部字节数组中的数据)。

范例1-10:输出部分字节数组内容(设置数组的开始索引和长度)。

范例1-11:数据读取操作。

范例1-12:采用while循环实现输入流操作。

范例1-13:利用do…while实现数据读取。

范例1-14:使用Writer类实现内容输出

范例1-15:使用Reader读取数据。

范例1-16:强制清空字符流缓冲区。

1.3  转换流

范例1-17:实现输出流转换。

1.4  案例:文件复制

范例1-18:实现文件复制操作。

正在上传…重新上传取消1.5  字符编码

范例1-19:取得当前系统中的环境属性中的文件编码。

范例1-20:程序出现乱码。

正在上传…重新上传取消1.6  内存流

范例1-21:实现一个小写字母转大写字母的操作。

范例1-22:实现文件的合并读取。

1.7  打印流

范例1-23:定义打印流工具类

范例1-24:使用PrintStream类实现输出。

范例1-25:格式化输出。

范例1-26:格式化字符串。

1.8  System类对IO的支持

范例1-27:错误输出。

范例1-28:利用OutputStream实现屏幕输出。

范例1-29:消费型函数式接口与方法引用。

范例1-30:实现键盘的数据输入。

范例1-31:改进输入操作设计。

正在上传…重新上传取消1.9  字符缓冲流:BufferedReader

范例1-32:键盘数据输入的标准格式。

范例1-33:判断输入内容。

范例1-34:读取文件。

正在上传…重新上传取消1.10  扫描流:Scanner

范例1-35:利用Scanner实现键盘数据输入。

范例1-36:输入一个数字——double。

范例1-37:正则验证。

范例1-38:读取文件。

正在上传…重新上传取消1.11  对象序列化

范例1-39:定义一个可以被序列化对象的类。

范例1-40:实现序列化对象操作——ObjectOutputStream。

范例1-41:实现反序列化操作——ObjectInputStream。

范例1-42:定义不需要序列化的属性。


第一章:Java IO编程

1.1  文件操作类:File

范例1-1:文件基本操作。任意给定一个文件路径,如果文件不存在则创建一个新的文件,如果文件存在则将文件删除。

package com.yootk.demo;

import java.io.File;

public class TestDemo {

    public static void main(String[] args) throws Exception { // 此处直接抛出

        File file = new File("d:\\test.txt"); // 设置文件的路径

        if (file.exists()) { // 判断文件是否存在

           file.delete(); // 删除文件

        } else { // 文件不存在

           System.out.println(file.createNewFile()); // 创建新文件

        }

    }

}

范例1-2:创建带路径的文件。

如果给定的路径为根路径,则文件可以直接利用createNewFile()方法进行创建;如果要创建的文件存在目录,那么将无法进行创建。所以合理的做法应该是在创建文件前判断父路径(getParent()取得父路径)是否存在,如果不存在则应该先创建目录(mkdirs()创建多级目录),再创建文件。包含路径的文件创建如图1-2所示。

package com.yootk.demo;

import java.io.File;

public class TestDemo {

    public static void main(String[] args) throws Exception { // 此处直接抛出

        File file = new File("d:" + File.separator + "demo" + File.separator

              + "hello" + File.separator + "yootk" + File.separator

              + "test.txt"); // 设置文件的路径

        if (!file.getParentFile().exists()) { // 现在父路径不存在

           file.getParentFile().mkdirs(); // 创建父路径

        }

        System.out.println(file.createNewFile()); // 创建新文件

    }

}

范例1-3:取得文件或目录的信息。

package com.yootk.demo;

import java.io.File;

import java.math.BigDecimal;

import java.text.SimpleDateFormat;

import java.util.Date;

public class TestDemo {

    public static void main(String[] args) throws Exception {  // 此处直接抛出

        File file = new File("d:" + File.separator + "my.jpg"); // 设置文件的路径

        if (file.exists()) {

           System.out.println("是否是文件:" + (file.isFile()));

           System.out.println("是否是目录:" + (file.isDirectory()));

           // 文件大小是按照字节单位返回的数字所以需要将字节单元转换为兆M的单元

           // 但是考虑到小数点问题所以使用BigDecimal处理

           System.out.println("文件大小:"

                    + (new BigDecimal((double) file.length() / 1024 / 1024)

                            .divide(new BigDecimal(1), 2,

                                   BigDecimal.ROUND_HALF_UP)) + "M");

           // 返回的日期是以long的形式返回可以利用SimpleDateFormat进行格式化操作

           System.out.println("上次修改时间:"

                    + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

                             .format(new Date(file.lastModified())));

        }

    }

}

范例1-4:列出目录信息。

package com.yootk.demo;

import java.io.File;

public class TestDemo {

    public static void main(String[] args) throws Exception { // 此处直接抛出

        File file = new File("c:" + File.separator);

        if (file.isDirectory()) { // 判断当前路径是否为目录

           File result [] = file.listFiles() ;

           for (int x = 0; x < result.length; x++) {

               System.out.println(result[x]); // 调用toString()

           }

        }

    }

}

范例1-5:列出指定目录下的所有文件及子目录信息。在每一个目录中有可能还会存在其他子目录,并且还可能有更深层次的子目录,所以为了可以列出所有的内容,应该判断每一个给定的路径是否是目录。如果是目录则应该继续列出,这样的操作最好使用递归的方式完成。

package com.yootk.demo;

import java.io.File;

public class TestDemo {

    public static void main(String[] args) throws Exception { // 此处直接抛出

        File file = new File("c:" + File.separator); // 定义操作路径

        print(file); // 列出目录

    }

    /**

     * 列出目录结构此方法采用递归调用形式

     * @param file 要列出目录的路径

     */

    public static void print(File file) {

        if (file.isDirectory()) { // 路径为目录

           File result[] = file.listFiles(); // 列出子目录

           if (result != null) { // 目录可以列出

              for (int x = 0; x < result.length; x++) {

                  print(result[x]); // 递归调用

              }

           }

        }

        System.out.println(file); // 直接输出完整路径

    }

}

1.2  字节流与字符流

范例1-6:自动执行close()操作。

package com.yootk.demo;

class Net implements AutoCloseable {

    @Override

    public void close() throws Exception {

        System.out.println("*** 网络资源自动关闭释放资源。");

    }

    public void info() throws Exception { // 假设有异常抛出

        System.out.println("*** 欢迎访问:www.yootk.com");

    }

}

public class TestDemo {

    public static void main(String[] args) {

        try (Net n = new Net()){

            n.info();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}

范例1-7:文件内容的输出。

package com.yootk.demo;

import java.io.File;

import java.io.FileOutputStream;

import java.io.OutputStream;

public class TestDemo {

    public static void main(String[] args) throws Exception { // 直接抛出

        // 1定义要输出文件的路径

        File file = new File("d:" + File.separator + "demo" + File.separator

              + "mldn.txt");

        // 此时由于目录不存在,所以文件不能输出,应该首先创建目录

        if (!file.getParentFile().exists()) { // 文件目录不存在

           file.getParentFile().mkdirs(); // 创建目录

        }

        // 2应该使用OutputStream和其子类进行对象的实例化此时目录存在文件还不存在

        OutputStream output = new FileOutputStream(file);

        // 字节输出流需要使用byte类型,需要将String类对象变为字节数组

        String str = "更多课程资源请访问:www.yootk.com";

        byte data[] = str.getBytes(); // 将字符串变为字节数组

        output.write(data); // 3输出内容

        output.close(); // 4资源操作的最后一定要进行关闭

    }

}

范例1-8:文件追加。

    // 2应该使用OutputStream和其子类进行对象的实例化,此时目录存在,文件还不存在

    OutputStream output = new FileOutputStream(file,true) ;

范例1-9:采用单个字节的方式输出(此处可以利用循环操作输出全部字节数组中的数据)。

    for (int x= 0 ; x < data.length ; x ++) {

        output.write(data[x]); // 内容输出

    }

范例1-10:输出部分字节数组内容(设置数组的开始索引和长度)。

    output.write(data, 6, 6); // 内容输出

范例1-11:数据读取操作。

package com.yootk.demo;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

public class TestDemo {

    public static void main(String[] args) throws Exception { // 直接抛出

        File file = new File("d:" + File.separator + "demo" + File.separator

              + "mldn.txt"); // 1定义要输出文件的路径

        if (file.exists()) { // 需要判断文件是否存在后才可以进行读取

           // 2使用InputStream进行读取

           InputStream input = new FileInputStream(file) ;

           byte data [] = new byte [1024] ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值