第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. 20.Mysql锁机制

    20.锁问题锁是计算机协调多个进程或线程并发访问某一资源的机制. 20.1 Mysql锁概述锁类型分为表级锁.页面锁.行级锁.表级锁:一个线程对表进行DML时会锁住整张表,其它线程只能读该表,如果要写 ...

  2. Oracle_SQL(4) DDL 表和约束

    数据库对象分为占存储空间的对象和不占存储存储空间的对象.占存储空间的对象主要包括:表.索引等.select distinct segment_type from dba_segments order ...

  3. java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;)Ljavax/servlet/jsp/JspApplicationContext;

    在Tomcat下部署应用时会报这个错误,参考以下这篇博客:http://blog.csdn.net/robinsonmhj/article/details/37653189,删除Tomcat目录下we ...

  4. python入门科普IDE工具和编译环境

            应友人之邀,今天来讲述python的一些入门内容.本次讲解的并不是语法或者某个模块.                  python下载安装 大多数 Linux 发行版在默认安装的情况 ...

  5. 品味性能之道<十一>:JAVA中switch和if性能比较

    通常而言大家普遍的认知里switch case的效率高于if else.根据我的理解而言switch的查找类似于二叉树,if则是线性查找.按照此逻辑推理对于对比条件数目大于3时switch更优,并且对 ...

  6. option_match

    //与match区别:如果没有匹配到,返回NULLCREATE (olive:Person {name:'Olive Stone'}),(charlie:Person {name:'Charlie S ...

  7. flask部署

    https://blog.csdn.net/zhuod/article/details/77850783

  8. linux fedora 的备份小技巧

    大家都知道,在fedora中,是没有默认安装带有GUI的备份软件的. 我们可以去软件中心搜索“备份”或者“dup”来安装deja-dup来进行备份,这个软件就是ubuntu中设置的“备份”,只不过ub ...

  9. HTML5中的Web Notification桌面通知(右下角提示)

    html5桌面通知(Web Notifications)对于需要实现在新消息入线时,有桌面通知效果的情况下非常有用,在此简单介绍一下这个html5的新属性.通过Web Notifications(桌面 ...

  10. php与html代码的若干转换

    以前懵懵懂懂的看过,没怎么在意,现在总结一下 一般来说,像留言板之类的content,用这样的就够了: $content=addslashes(htmlspecialchars($_POST['con ...