目录
范例1-1:文件基本操作。任意给定一个文件路径,如果文件不存在则创建一个新的文件,如果文件存在则将文件删除。
范例1-9:采用单个字节的方式输出(此处可以利用循环操作输出全部字节数组中的数据)。
范例1-10:输出部分字节数组内容(设置数组的开始索引和长度)。
正在上传…重新上传取消1.9 字符缓冲流:BufferedReader
范例1-40:实现序列化对象操作——ObjectOutputStream。
范例1-41:实现反序列化操作——ObjectInputStream。
第一章: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] ; |