java 文件流 重写_java中关于文件流的总结

269e8dd0d11c3db15e54f522f6d6b49c.png

[File类]

1、 作用: 用于对磁盘文件进行操作。 删除、创建等。

2、 三种常用的构造函数:

① File file1 = new File("F:\\test");

直接传入一个路径,拿到一个文件或者是文件夹。

② File file2 = new File("F:\\test","test.txt");

第一个参数传入父路径、 第二个参数传入子路径或者文件。

③ File file3 = new File(file1,"test.txt");

第一个参数传入一个父路径的file对象, 第二个参数传入子路径或者文件。

3、 路径的表示:

文件夹的分隔,可以使用"/"(通常用于Linux系统,Windows也适用)

也可以使用"\\"(通常用于Windows),注意一个\需要进行转义。。

public static void main(String[] args) {

File file1 = new File("F:/test");

File file2 = new File("F:\\test","test.txt");

File file3 = new File(file1,"test.txt");

/**

* 检测文件是否可读

*/

System.out.println(file1.canRead());

/**

* 检测文件是否可写

*/

System.out.println(file2.canWrite());

/**

* 比较两个对象是否相等

*/

System.out.println(file2.equals(file3));

/**

* 检测文件是否存在

*/

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

/***

* 取到文件的绝对路径

*/

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

/**

* 取到文件名或者文件夹名

*/

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

/**

* 取到当前文件或文件夹的父路径

*/

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

/**

* 检测当前文件是否是绝对路径

*/

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

/**

* 检测当前路径是否是目录

*/

System.out.println(file2.isDirectory());

/**

* 检测当前路径是否是文件

*/

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

/**

* 删除文件: 删除成功返回true,删除失败返回false

* 如果删除的是文件夹,则只能删除空文件夹,否则删除失败!

*/

//System.out.println(file2.delete());

System.out.println("--------------------------");

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

System.out.println("--------------------------");

/**

* 创建一个新文件。 创建失败返回false

*/

//System.out.println("_________________________________");

//try {

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

//} catch (IOException e) {

TODO Auto-generated catch block

//e.printStackTrace();

//}

/**

* 创建一个文件夹。只有当文件夹不存在时,才能创建成功。

* mkdir: 只能创建一层目录,如果倒数第二层目录也不存在,将创建失败。

* mkdirs: 可以创建多层目录,无论有几层不存在,都可以依次创建。

*/

System.out.println("_________________________________");

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

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

/**

* 获得文件所在分区的总大小和可用大小,以字节B为单位。

*/

System.out.println(file1.getTotalSpace());

System.out.println(file1.getUsableSpace());

/**

* 返回当前文件或文件夹的大小。单位B

*/

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

/**

* list(): 返回当前目录中的所有文件和文件夹的名字。 返回值类型为String数组

*

* 可以在参数中,传入FilenameFilter接口的实现类对象,表示对列表中的所有文件进行遍历过滤。

* 需要重写accept方法,如果保留当前文件return true ,如果不要当前文件,return false

*/

//String[] list = file1.list(new FilenameFilter() {

dir: 表示包含当前文件的父路径;

name: 表示当前文件名

//public boolean accept(File dir, String name) {

//if(name.endsWith(".txt")){

//return true;

//}else{

//return false;

//}

//}

//});

//for (String item : list) {

//System.out.println(item);

//}

/**

* .listFiles(): 返回当前目录中所有的文件和文件夹的路径。 返回值类型为File数组。

* 同样可以对文件进行过滤:

* ① 与list()一样,使用FilenameFilter进行过滤;

* ② 使用FileFilter接口的实现类,进行过滤。

*/

//File[] files = file1.listFiles(new FileFilter() {

pathname 表示当前文件的全路径(包括路径名和文件名)。

//public boolean accept(File pathname) {

//if(pathname.getName().endsWith(".txt")){

//return true;

//}else{

//return false;

//}

//}

//});

//for (File file : files) {

//System.out.println(file.getParent()+"-----"+file.getName());

//}

/**

* 重命名一个文件。 要求传入一个新文件名的file对象。

*/

//File file4 = new File("F:\test\test08.txt");

//System.out.println(file1.renameTo(file4));

//System.out.println(file1.setReadOnly());

//System.out.println(file1.setLastModified(new Date().getTime()));

}

}

//============================================================================================================

[Java中的IO流]

1、 根据流的方向: 输入流和输出流

根据读取文字的大小: 字节流和字符流

(字节流按字节读取,读取中文时容易乱码; 字符流按照字符读取,通常用于读取中文)

根据读取的方式: 节点流和缓存流

public class Demo03_FileInputStream_FileOutStream {

public static void main(String[] args) {

FileInputStream fis = null;

FileOutputStream fos = null;

try {

fis = new FileInputStream("F:/test.txt");

/**

* 如果第二个参数省略,或传入false,则表示每次写入时将原文件清空,从文件头部开始写入。

* 如果第二个参数传入true,则表示不清空原文件,在文件末尾处追加新内容。

*/

fos = new FileOutputStream("F:/out.txt",false);

System.out.println(fis.available());

StringBuffer sb = new StringBuffer();

/**

* 按照字节,一个一个字节读取文件

*/

int n = -1;

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

sb.append((char)n);

}

System.out.println(sb);

/**

* 将byte数组直接声明为输入流的长度,一次性读出所有文字。

*/

//byte[] bytes = new byte[fis.available()];

//fis.read(bytes);

//sb.append(new String(bytes));

//System.out.println(sb);

/**

* 一次读取1024个字节。

*/

//byte[] bytes = new byte[1024];

//int n = -1;

//while ((n = fis.read(bytes)) != -1) {

//sb.append(new String(bytes));

//}

//System.out.println(sb);

sb.reverse();

/**

* 将字符串转为Byte数组,并通过输出流写入文件。

*/

fos.write("12345".getBytes());

System.out.println(sb);

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

/**

* finally 无论上述代码是否会出现异常,都会执行的一段代码;

* 通常用于关闭各种资源。

*/

try {

fis.close();

fos.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

[BufferedInputStream、BufferedOutputStream]

继承自java.io.FilterOutputStream(此类是过滤输出流的所有类的超类)

1、 作用: 在基本流的基础上进行包装,读取或者写入文件时,将通过缓存进行。

即,先将内容写入到缓存区,缓存区满以后再进行读取或写入操作。

可以大大减小文件的操作次数,提高写入效率。

2、 缓存流的使用:

在基本流的基础之上,进行包装:

new BufferedInputStream(new FileInputStream("F:/test.txt"));

这种写法,我们称之为IO链,IO关闭时只需要关闭最外层流,内层流将自动关闭。

3、 BufferedOutputStream在关闭前,通常调用bos.flush();

表示关闭前将缓存进行刷新,将缓存区剩余未满的内容写入文件。

但是一般.close()方法,自带刷新功能。

public class Demo04_BufferedInputStream_BufferedOutStream {

public static void main(String[] args) {

BufferedInputStream bis = null;

BufferedOutputStream bos = null;

try {

bis = new BufferedInputStream(new FileInputStream("F:/test.txt"));

bos = new BufferedOutputStream(new FileOutputStream("F:/out.txt",false));

StringBuffer sb = new StringBuffer();

int n = -1;

while ((n = bis.read()) != -1) {

sb.append((char)n);

}

System.out.println(sb);

bos.write(sb.toString().getBytes());

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

/**

* finally 无论上述代码是否会出现异常,都会执行的一段代码;

* 通常用于关闭各种资源。

*/

try {

//fis.close();

bis.close();

//fos.close();

/**

* 在程序最后,刷新缓存流,将缓存流中未满的内容,写入到文件中。

* 调用close()方法,将自动刷新。

*/

bos.flush();

bos.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java接口的默认方法,实现类调用接口默认方法

概述 Java8带来了一些全新的特性,包括lambda表达式、函数接口、方法引用、流、可选方法、接口中的静态方法和默认方法。 在本文中,我们将深入讨论为什么java8接口新增了默认方法,如何使用默认方法,并讨论一些有用的用例。 默认…

java程序的加载顺序_Java类的加载顺序

问题昨天有人问我一个类中有静态方法,有静态代码块,普通代码块,构造函数,普通方法,静态方法,那么它们的加载顺序是什么?如果有之类继承该类,也有如上的方法,那么加载顺序…

java.lang.Thread类详解,yield方法,join方法,interrupt方法,interrupted方法,destroy方法

一、前言 位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前,先介绍与线程相关知识:线程的几种状态、上下文切换,然后接着介绍Thread类…

hashSet与treeSet的去重原理

hashSet与treeSet的去重原理 1、TreeSet去重原理 :compareTo 可以实现排序及去重:如果compareTo返回0,说明是重复的,返回的是自己的某个属性和另一个对象的某个属性的差值,如果是负数,则往前面排&#xff…

php mysql group by_php – 如何在mysql查询中解决“不在GROUP BY中”错误

我有两个模型:帖子和喜欢有一对多的关系(所以,一个帖子有很多喜欢). Likings模型还有一个isActive字段,表示喜欢是主动还是被动.我想获得(排序)前5个帖子,这些帖子已经收到了最大的“活跃”喜欢(只有喜欢其isActive字段为true的帖子才会被考虑).这是查询&#xff1a…

排序实训问答

排序 注意事项: 问:你这排序怎么会出现两个0毫秒 或者怎么会出现0毫秒的现象呢? 答:在计算机中,时间的计算是以毫秒为单位的。当两个时间间隔非常短,小于1ms时,计算机可能会将时间计算为0毫秒…

git stash 缓存 简介

当我们在使用git的时候,又是会有这种情况:当新的需求了的时候。我们需要为此需求新建一个分支,再次分支上进行修改,当经过测试,提交代码时,在将其合并到主分支,或生产分支上。 但是有时候也有失…

java jsp session_JSP中Session的使用

你的session对象ID是:int Num 0; //定义前面要加!号synchronized void countPeople() { //同步方法Num;}%>if (session.isNew()) { //推断是否为新用户countPeople();String str String.valueOf(Num);session.setAttribute("count", str); //将str 加…

java中的线程池有哪些,分别有什么作用?

java中的线程池有哪些,分别有什么作用? 1.进程-线程简单介绍 2.java的线程池是什么,有哪些类型,作用分别是什么 3.使用线程池的优点 1.进程-线程的简单介绍 进程 什么是进程呢? 进程是计算机中的程序关于某数据集合…

二进制编译安装mysql_二进制编译安装mysql

1:解压包及做链接# tar xvf mysql-5.5.13-linux2.6-i686.tar.gz -C /usr/local# cd /usr/local# ln -sv mysql-5.5.13-linux2.6-i686 mysql# cd mysql---------------------------------------------------------------2:增加用户mysql及创建数据库数据存放目录/mydata/data# g…

线程安全的集合类有哪些?

验证ArrayList线程不安全 ArrayList 应当是开发中用到的最多的集合类,是动态列表,List 接口的实现类。 多数情况下,我们实在单线程环境使用,或者是在方法内部,以局部变量的形式使用,一般不会出现线程安全问…

try-catch-finally的执行顺序

try-catch-finally的执行顺序 结论: 不管有没有出现异常,finally代码块都会执行;不管try和catch的代码块中有return时,finally仍会执行,且如果finally代码块也有return,则此代码肯定会返回finally执行的r…

java jdbc mysql url_java – 如何生成JDBC数据库URL?

我今天已经研究了大约3个小时,我觉得我很接近,但我有几个问题.我到目前为止找到的最好的信息来源是:https://stackoverflow.com/a/2840358,但它没有回答我的所有问题.一点背景:我正在使用Microsoft SQL Server 2014,并且我已经验证了IP地址127.0.0.1处于…

try catch finally 中包含return的几种情况,及返回结果

第一种情况:在try和catch中有return,finally中没有return,且finally中没有对try或catch中要 return数据进行操作的代码,这种情况也是最好理解的。 public class Test {public static int num1;public static void main(String[] …

java jp2launcher.exe_芯科cp2112有熟悉的吗?配置不能保存是什么原因?

文件夹PATH列表卷序列号为2474-602AC:.├─CP2112_SDK│ │ ReleaseNotes.txt│ ││ ├─Documentation│ │ ├─ApplicationNotes│ │ │ an495.pdf│ │ │ an496.pdf│ │ ││ │ ├─Datasheets│ │ │ CP2112.pdf│ │ ││ │ ├─Datash…

包装类的缓存问题

包装类的缓存问题 整型、char类型所对应的包装类,在自动装箱时,对于-128~127之间的值会进行缓存处理,其目的是提高效率。 缓存处理的原理为:如果数据在-128~127这个区间,那么在类加载时就已经为该区间的每个数值创建…

java中项目启动时加载_如何在项目启动时,加载或解析某配置文件

在web项目中有很多时候需要在项目启动时就执行一些方法,而且只需要执行一次,比如:加载解析自定义的配置文件、初始化数据库信息等等,在项目启动时就直接执行一些方法,可以减少很多繁琐的操作。在工作中遇到了项目初始数…

Shiro介绍及主要流程

Shiro介绍及主要流程 什么是Shiro Apache Shiro是一个强大且灵活的开源安全框架,易于使用且好理解,撇开了搭建安全框架时的复杂性。 Shiro可以帮助我们做以下几件事: 认证使用者的身份 提供用户的访问控制,比如: 决定…

java数据库程序实例_Java连接各种数据库的实例大全

1、Oracle8/8i/9i数据库(thin模式)Class.forName(“oracle.jdbc.driver.OracleDriver”)。newInstance();String url“jdbc:oracle:thin:localhost:1521:orcl”;//orcl为数据库的SIDString user“test”;String password“test”;Connection conn DriverManager.get…

http的请求体body的几种数据格式

文章目录multipart/form-dataapplication/x-www-from-urlencodedrawbinarypostman中 Params和Body的区别multipart/form-data 以表单形式提交,主要是上传文件用它,在http中格式为 application/x-www-from-urlencoded 以键值对的数据格式提交 raw…