第09天 IO流

今日内容介绍

u  File类

u  字符流与字节流

第1章   File类

1.1      File概述

打开API,搜索File类。阅读其描述:File文件和目录路径名的抽象表示形式。即,Java中把文件或者目录(文件夹)都封装成File对象。也就是说如果我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可,那么我们就要研究研究File这个类中都有那些功能可以操作文件或者文件夹呢

1.2      File类的构造函数

File(String pathname) :将一个字符串路径封装成File对象

File(String parent,String child):传入一个父级路径和子级路径

File(File parent,String child):传入一个File类型的父级路径和子级路径

1.2.1    案例代码一:

package com.itheima_01;

import java.io.File;

/*

* File:文件和目录路径名的抽象表示形式,File 类的实例是不可变的

*

* 构造方法:

*      File(File parent, String child)

*      File(String pathname)

*      File(String parent, String child)

*

*

*/

public class FileDemo {

public static void main(String[] args) {

//File(String pathname) :将指定的路径名转换成一个File对象

//File f = new File("D:\\a\\b.txt");

//File(String parent, String child) : 根据指定的父路径和文件路径创建File对象

//File f2 = new File("D:\\a","b.txt");

//File(File parent, String child) :根据指定的父路径对象和文件路径创建File对象

//File parent = new File("D:\\a");

//File f3 = new File(parent,"b.txt");

File f4 = new File(new File("D:\\a"),"b.txt");

}

}

1.3      File类创建和删除功能

boolean createNewFile():指定路径不存在该文件时时创建文件,返回true,否则返回false

boolean mkdir():当指定的单级文件夹不存在时创建文件夹并返回true,否则返回false

boolean mkdirs():当指定的多级文件夹某一级文件夹不存在时,创建多级文件夹并返回true,否则返回false

boolean delete():删除文件或者删除单级文件夹

1.3.1    案例代码二:

package com.itheima_01;

import java.io.File;

import java.io.IOException;

/*

* 创建功能

*      boolean createNewFile()

*      boolean mkdir()

*      boolean mkdirs()

* 删除功能

*      boolean delete()

*

*  绝对路径:固定不可改变的路径,以盘符开头

*  相对路径:相对某个参照物,不能以盘符开头

*      在eclipse中相对路径相对应当前项目的根目录

*

*

*  注意:删除一个文件夹,这个文件夹下面不能有其他的文件和文件夹

*/

public class FileDemo2 {

public static void main(String[] args) throws IOException {

File f = new File("d:\\a\\b.txt");//绝对路径

File f2 = new File("a.txt");//相对路径

//boolean createNewFile() : 当指定文件不存在时创建文件并返回true,否则返回false

System.out.println(f2.createNewFile());

//boolean mkdir()   : 当指定文件夹不存在时创建文件夹并返回true,否则返回false

File f3 = new File("b");

System.out.println(f3.mkdir());

//boolean mkdirs() : 创建指定文件夹,当文件夹所在的目录不存在,则顺道一块创建了

File f4 = new File("c\\d\\e");

System.out.println(f4.mkdir());

System.out.println(f4.mkdirs());

File f5 = new File("c.txt");

System.out.println(f5.mkdir());

//boolean delete() :当指定的文件或文件夹存在时删除文件或者文件夹 并返回true,否则返回false

System.out.println(f2.delete());

System.out.println(f3.delete());

File f6 = new File("c");

System.out.println(f6.delete());

}

}

1.4      File类的判断功能

boolean exists():判断指定路径的文件或文件夹是否存在

boolean isAbsolute():判断当前路路径是否是绝对路径

boolean isDirectory():判断当前的目录是否存在

boolean isFile():判断当前路径是否是一个文件

boolean isHidden():判断当前路径是否是隐藏文件

1.4.1    案例代码三:

package com.itheima_01;

import java.io.File;

import java.io.IOException;

/*

*  判断功能

*      boolean exists()

*      boolean isAbsolute()

*      boolean isDirectory()

boolean isFile()

boolean isHidden()

*/

public class FileDemo3 {

public static void main(String[] args) throws IOException {

//method();

//method2();

//method3();

method4();

}

private static void method4() {

File f = new File("d:\\a\\b.txt");

//boolean isHidden() :判断File对象指向的路径是否有隐藏属性,如果隐藏了则返回true,否则返回false

System.out.println(f.isHidden());

}

private static void method3() {

File f = new File("a.txt");

File f2 = new File("b");

//boolean isDirectory() :判断File对象指向的路径是否是文件夹,如果是则返回true,否则返回false

//boolean isFile()  : 判断File对象指向的路径是否是文件,如果是则返回true,否则返回false

//System.out.println(f.isDirectory());

//System.out.println(f2.isDirectory());

System.out.println(f.isFile());

System.out.println(f2.isFile());

}

private static void method2() {

//File f = new File("a.txt");

File f2 = new File("d:\\a\b.txt");

//boolean isAbsolute() :判断File对象指向的路径是否是绝对路径,如果是绝对路径则返回true,否则返回false

System.out.println(f2.isAbsolute());

}

private static void method() {

File f = new File("a.txt");

//f.createNewFile();

//boolean exists() : 判断文件或者文件夹是否存在,如果存在则返回true,否则返回false

System.out.println(f.exists());

}

}

1.5      File类的获取功能和修改名字功能

File getAbsoluteFile():获取文件的绝对路径,返回File对象

String getAbsolutePath():获取文件的绝对路径,返回路径的字符串

String getParent():获取当前路径的父级路径,以字符串形式返回该父级路径

File getParentFile():获取当前路径的父级路径,以字File对象形式返回该父级路径

String getName():获取文件或文件夹的名称

String getPath():获取File对象中封装的路径

long lastModified():以毫秒值返回最后修改时间

long length():返回文件的字节数

boolean renameTo(File dest): 将当前File对象所指向的路径 修改为 指定File所指向的路径

1.5.1    案例代码四:

package com.itheima_01;

import java.io.File;

import java.io.IOException;

/*

*  获取功能

File getAbsoluteFile()

*      String getAbsolutePath()

*      String getParent()

*      File getParentFile()

*      String getName()

*      String getPath()

long lastModified()

long length()

修改功能:

boolean renameTo(File dest)

*/

public class FileDemo4 {

public static void main(String[] args) throws IOException  {

//method();

//method2();

//method3();

File f = new File("d.txt");

File f2 = new File("e.txt");

//boolean renameTo(File dest) : 将当前File对象所指向的路径 修改为 指定File所指向的路径

//注意:修改的文件路径不能存在,如果存在则修改失败

System.out.println(f.renameTo(f2));

}

private static void method3() {

File f = new File("a.txt");

File f2 = new File("d:\\a\\b.txt");

File f3 = new File("b");

//String getName() : 获取文件和文件夹的名称

//System.out.println(f.getName());

//System.out.println(f2.getName());

//System.out.println(f3.getName());

//String getPath() : 返回创建File对象时给的路径

//System.out.println(f.getPath());

//System.out.println(f2.getPath());

//System.out.println(f3.getPath());

//long lastModified() : 以毫秒值的形式返回最后修改时间

//System.out.println(f.lastModified());

//2514023311294

//Date d = new Date(2514023311294L);

//System.out.println(d.toLocaleString());

//long length() : 返回文件的字节数

System.out.println(f.length());

System.out.println(f3.length());

}

private static void method2() throws IOException {

//File f = new File("a.txt");

//File f2 = new File("b","c.txt");

//System.out.println(f2.createNewFile());

File parent = new File("b");

File f3 = new File(parent,"c.txt");

if(!parent.exists()) {

parent.mkdirs();

}

System.out.println(f3.createNewFile());

//String getParent()

System.out.println(f3.getParent());

//File getParentFile()

System.out.println(f3.getParentFile());

}

private static void method() {

File f = new File("d:\\a\\b.txt");

File f2 = new File("a.txt");

//File getAbsoluteFile()  :以File对象的形式返回当前File对象所有指向的绝对路径

System.out.println(f2.getAbsoluteFile());

//String getAbsolutePath() : 返回File对象所指向的绝对路径

System.out.println(f2.getAbsolutePath());

}

}

1.6      File类的其它获取功能

String[] list():以字符串数组的形式返回当前路径下所有的文件和文件夹的名称

File[] listFiles():以File对象的形式返回当前路径下所有的文件和文件夹的名称

static File[] listRoots():获取计算机中所有的盘符

1.6.1    案例代码五:

package com.itheima_01;

import java.io.File;

/*

* String[] list()

File[] listFiles()

static File[] listRoots()

*/

public class FileDemo5 {

public static void main(String[] args)  {

//method();

//method2();

//static File[] listRoots() :  返回的是所有盘符

File[] files = File.listRoots();

for (File file : files) {

System.out.println(file);

}

}

private static void method2() {

File f = new File("b");

File f2 = new File("D:\\workspace\\myFile");

File f3 = new File("c.txt");

//File[] listFiles()

File[] files = f3.listFiles();

for (File file : files) {

System.out.println(file.getName());

}

}

private static void method() {

File f = new File("b");

File f2 = new File("D:\\workspace\\myFile");

File f3 = new File("c.txt");

//String[] list() : 返回当前路径下所有的文件和文件夹名称

//注意:只有指向文件夹的File对象才可以调用该方法

String[] files = f3.list();

for (int i = 0; i < files.length; i++) {

System.out.println(files[i]);

}

}

}

1.7      File类两个案例

1.7.1    案例代码六

输出指定目录下所有的java文件名(包含子目录)

package com.itheima_02;

import java.io.File;

/*

* 需求:输出指定目录下所有的java文件名(包含子目录)

*/

public class RecurrenceTest {

public static void main(String[] args) {

File f = new File("src");

//File f = new File("src\\com\\itheima_01\\RecurrenceDemo.java");

method(f);

}

public static void method(File file) {

if(file.isDirectory()) {

File[] files = file.listFiles();

for (File f : files) {

//判断是否是文件对象

if(f.isFile()) {

if(f.getName().endsWith(".java")) {

System.out.println(f.getName());

}

}

else if(f.isDirectory()){

//是一个目录对象

method(f);

}

}

}

}

//输出指定目录下的所有java文件名(不包含子目录)

public static void method2(File file) {

if(file.isDirectory()) {

File[] files = file.listFiles();

for (File f : files) {

//判断是否是文件对象

if(f.isFile()) {

if(f.getName().endsWith(".java")) {

System.out.println(f.getName());

}

}

}

}

}

}

1.7.2    案例代码七

删除指定的目录(包含子目录)

  

package com.itheima_02;

import java.io.File;

/*

* 需求:删除指定的目录(包含子目录)

*

* 注意:如果要删除一个目录,则需要先删除这个目录下的所有子文件和子目录

*

*/

public class RecurrenceTest2 {

public static void main(String[] args) {

File f = new File("d:\\a");

method(f);

}

//删除指定目录下所有文件和目录

public static void method(File file) {

if(file.isDirectory()) {

//干掉自己所有的子文件和子目录

//获取所有的子文件和子目录

File[] files = file.listFiles();

for (File f : files) {

if(f.isFile()) {

//直接干掉他

System.out.println(f.getName());

f.delete();

}

else if(f.isDirectory()) {

//继续查看是否还有文件和子目录

method(f);

}

}

//干掉自己

System.out.println(file.getName());

file.delete();

}

}

}

第2章   字符流与字节流

2.1      概述

IO流分类:

流向

输入流       读取数据       FileReader    Reader

输出流     写出数据       FileWriter     Writer

数据类型

字节流

字节输入流   读取数据     InputStream

字节输出流   写出数据     OutputStream

字符流

字符输入流  读取数据     Reader

字符输出流  写出数据    Writer

2.2      利用字符流复制文本文件

利用字符流将当前工程下的IODemo.java拷贝到d盘的a文件夹下

2.2.1    案例代码八:

package com.itheima_02;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

/*

* 使用字符流复制文本文件

*

* 数据源    IODemo.java

* 目的地    d:\\IODemo.java

*

*/

public class FileCopyDemo {

public static void main(String[] args) throws IOException  {

//创建字符输入流对象

FileReader fr = new FileReader("IODemo.java");

//创建字符输出流对象

FileWriter fw = new FileWriter("d:\\IODemo.java");

//一次读写一个字符

/*int ch;

while((ch = fr.read()) != -1) {

fw.write(ch);

fw.flush();

}*/

//一次读写一个字符数组

int len;//用于存储读到的字符个数

char[] chs = new char[1024];

while((len = fr.read(chs)) != -1) {

fw.write(chs,0,len);

fw.flush();

}

//释放资源

fw.close();

fr.close();

}

}

2.3      利用字节流复制文本文件

利用字节流将当前工程下的IODemo.java拷贝到d盘下

2.3.1    案例代码九:

package com.itheima_03;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

/*

* 使用字节流复制文本文件

*

* 数据源    IODemo.java

* 目的地    d:\\a\\IODemo.java

*

*/

public class FileCopyDemo {

public static void main(String[] args) throws IOException  {

//创建字节输入流对象

FileInputStream fis = new FileInputStream("IODemo.java");

//创建字节输出流对象

FileOutputStream fos = new FileOutputStream("d:\\a\\IODemo.java");

//一次读写一个字节

/*int by;

while((by = fis.read()) != -1) {

fos.write(by);

}*/

//一次读写一个字节数组

int len;//存储读到的字节个数

byte[] bys = new byte[1024];

while((len = fis.read(bys)) != -1) {

fos.write(bys,0,len);

}

//释放资源

fos.close();

fis.close();

}

}

2.4      复制图片

字节流可以操作所有类型的文件,因为所有的文件在计算机中都是以字节形式存储

而字符流只能用来操作纯文本类型的文件,不能操作字节类型的文件

2.4.1    案例代码十:

package com.itheima_04;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

/*

* 分别使用字符流和字节流复制图片

*

* 二进制文件只能使用字节流进行复制(使用windows自带记事本打开读不懂的)

* 文本文件的复制即可使用字符流,也可以使用字节流

*

*/

public class CopyImage {

public static void main(String[] args) throws IOException  {

//method();

//创建字节输入流对象

FileInputStream fis = new FileInputStream("传智学院.jpg");

//创建字节输出流对象

FileOutputStream fos = new FileOutputStream("d:\\传智学院.jpg");

//一次读写一个字节数组

int len;//用于存储读到的字节个数

byte[] bys = new byte[1024];

while((len = fis.read(bys)) != -1) {

fos.write(bys,0,len);

}

//释放资源

fos.close();

fis.close();

}

private static void method() throws FileNotFoundException, IOException {

//创建字符输入流对象

FileReader fr = new FileReader("传智学院.jpg");

//创建字符输出流对象

FileWriter fw = new FileWriter("d:\\传智学院.jpg");

//一次读写一个字符数组

int len;//用于存储读到的字符个数

char[] chs = new char[1024];

while((len = fr.read(chs)) != -1) {

fw.write(chs,0,len);

fw.flush();

}

//释放资源

fw.close();

fr.close();

}

}

java基础-day20的更多相关文章

  1. Java基础系列8——IO流超详细总结

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 在初学Java时,I ...

  2. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  3. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

  4. 【JAVA面试题系列一】面试题总汇--JAVA基础部分

    JAVA基础 基础部分的顺序: 基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 每天几道,持续更新!! 1.一个". ...

  5. 最适合作为Java基础面试题之Singleton模式

    看似只是最简单的一种设计模式,可细细挖掘,static.synchronized.volatile关键字.内部类.对象克隆.序列化.枚举类型.反射和类加载机制等基础却又不易理解透彻的Java知识纷纷呼 ...

  6. java基础练习 字符串,控制流,日历,日期等

    1,对基本控制流程的一些练习 package org.base.practice3; import org.junit.Test; /** * Created with IntelliJ IDEA. ...

  7. Java基础知识【下】( 转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

  8. Java基础知识【上】(转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608272 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

  9. java基础学习03(java基础程序设计)

    java基础程序设计 一.完成的目标 1. 掌握java中的数据类型划分 2. 8种基本数据类型的使用及数据类型转换 3. 位运算.运算符.表达式 4. 判断.循环语句的使用 5. break和con ...

随机推荐

  1. 当时钟事件声明为过程变量 让system.threading.timer时钟失效

    这个项目的小模块就是画label 控件到tablepayoutpanel表单 之中, 中间用到了时钟,事件(带返回值的),哈希表 .由于时钟定义在 form1的启动构造函数中导致了form1,启动完毕 ...

  2. 7.Mysql存储引擎

    7.表类型(存储引擎)的选择7.1 Mysql存储引擎概述 mysql支持插件式存储引擎,即存储引擎以插件形式存在于mysql库中. mysql支持的存储引擎包括:MyISAM.InnoDB.BDB. ...

  3. 自适应手机网站meta name代码

    <meta name="viewport" content="width=device-width,initial-scale=1.0">   co ...

  4. fedora 安装gdal

    hese steps worked for me on a Fedora system: 1.) download the 3 files related to oracle instant clie ...

  5. 关于出现“对不起,您安装的不是正版应用...”的解决方法

    由于Discuz X版本增加了对插件的版本检测,在安装时,可能会出现:"对不起,您安装的不是正版应用,安装程序无法继续执行"的提示,如下图: 唱唱反调小编在此给大家分享解决方法: ...

  6. Python之路(第十二篇)程序解耦、模块介绍\导入\安装、包

    一.程序解耦 解耦总的一句话来说,减少依赖,抽象业务和逻辑,让各个功能实现独立. 直观理解“解耦”,就是我可以替换某个模块,对原来系统的功能不造成影响.是两个东西原来互相影响,现在让他们独立发展:核心 ...

  7. Vue组件中引入jQuery

    一.安装jQuery依赖 在使用jQuery之前,我们首先要通过以下命令来安装jQuery依赖: npm install jquery --save # 如果你更换了淘宝镜像,可以使用cnpm来安装, ...

  8. Django web project

    在virtualenv下 (myvenv) ~/djangogirls$ django-admin startproject mysite . 生成web 工程目录 djangogirls ├───m ...

  9. vue ui之 iview 事件拦截

    用过easyui的,应该清楚easyui组件有很多before事件拦截,有时候会特别重要. 最近在研究vue的ui组件iview虽然功能也不错,感觉还是没有像easyui那样强大,就比如before事 ...

  10. PHP + Redis 队列实战

    环境 centos6.5 PHP5.3 Redis安装 #yum install redis 1.redis配置认证密码 #vi /etc/redis.conf requirepass mypass ...