一、流的概念

流:数据在数据源(文件)和程序(内存)之间经历的路径。

输入流:数据从数据源(文件)到程序(内存)的路径。

输出流:数据从程序(内存)到数据源(文件)的路径。

以内存为参照,如果数据向内存流动,则是输入流,反之则是输出流

字节流:FileInputStream用来读取文件

     FileOutputStream用来写入到文件

字符流:FileReader\BufferedReader用来读取文件

     FileWrite\BufferedWrite用来写入到文件

二、操作用法

1.获取文件对象,针对该对象进行一些基本操作

         //创建一个文件对象
File f = new File("F:\\test\\sheet.xls");
//得到文件的路径
System.out.println("文件路径"+f.getAbsolutePath());
//得到文件的大小,字节数
System.out.println("文件大小"+f.length());
//可读属性
System.out.println("可读"+f.canRead());

2.创建文件(判断该文件是否存在,若存在则弹出提示,若不存在则进行创建)

 //创建文件
File f = new File("F:\\test\\test.txt");
//判断该文件是否存在
if(!f.exists())
{
//可以创建
try {
f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
else
{
System.out.println("改文件已存在,创建失败!");
}

3.创建文件夹(条件同上)

  //创建文件夹
File f = new File("F:\\test");
if (f.isDirectory())//判断是不是一个文件夹
{
System.out.println("创建失败");
} else {
f.mkdir();
}

Tips:这里写明一下isFile()、exists()和isDirectory()的区别

isFile():判断是否文件,也许可能是文件或者目录。
exists():判断是否存在,可能不存在。
isDirectory(): 判断该对象是否是一个文件夹。

4.列出某文件夹下面的所有文件(此时对象还是File,File没有文件和文件夹之分,对电脑来讲,文件夹只是一种特殊的文件)

 File f = new File("F:\\testt");
if (f.isDirectory()) {
File filelists[] = f.listFiles();
for (int i = 0; i < filelists.length; i++)
{
System.out.println("文件名是:"+filelists[i].getName());
}
}

5.FileInputStream的使用

 /**
* 演示FileInputStream类的使用
*/
package com.test2; import java.io.*; public class Demo11_2 {
public static void main(String[] args) { //得到一个文件对象
File f = new File("F:\\tt\\test.txt");
FileInputStream fis = null;
//因为file没用读写的能力,所以需要使用FileInputStream
try {
fis = new FileInputStream(f); //定义一个字节数组(相当于一个缓存,如果你的对象"f"是一个很大的文件,内存不够用,所以只能一点一点地读取)
byte[] bytes = new byte[1024];
//实际读取到的字节数
int n = 0;
//循环读取
//如果read()返回-1,则说明读取完毕
while ((n = fis.read(bytes)) != -1) {
//将字节转换成string
//此时实例化s时,要注意指定编码格式,电脑上文档默认的是GBK,而我这边默认的是utf-8,
//所以如果不指定格式的话,最后输出的中文会出现乱码
String s = new String(bytes, 0, n,"GBK");
System.out.println(s);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭文件流(关键)
try {
if (fis != null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

读取成功..

6.FileOutputStream的使用

 /**
* 演示FileOutputStream的使用
*/
package com.test2; import java.io.*; public class Demo11_3 {
public static void main(String[] args) {
File f = new File("F:\\tt\\test.txt");
//字节输出流
FileOutputStream fos = null; try {
fos = new FileOutputStream(f); String s = "Westlife - Better man\r\n西城男孩 - 更完美的人"; fos.write(s.getBytes());
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
} }
}

写入成功..

7.字节流的操作(通过写入写出来实现图片的拷贝,操作byte)

 /**
* 图片拷贝
*/
package com.test2; import java.io.*; public class Demo11_4 {
public static void main(String[] args) {
//先把图片读入到内存,再写到某个文件
//因为是二进制文件,因此只能用字节流完成
File f = new File("F:\\tt\\Westlife.jpg");
//输入流
FileInputStream fis = null;
//输出流
FileOutputStream fos = null; try {
fis = new FileInputStream(f);
//或者省略上面实例化File,直接在这里fis = new FileInputStream("F:\tt\Westlife.jpg");也可以 fos = new FileOutputStream("D:\\练习\\Westlife.jpg");
byte[] bytes = new byte[1024];
int n = 0;//记录实际读取到的字节数
//循环读取
while ((n = fis.read(bytes)) != -1) {
//输出到指定文件
fos.write(bytes);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭打开的文件流
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
} if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

8.字符流的操作(操作char)

 /**
* 字符流操作
*/
package com.test2; import java.io.*; public class Demo11_5 {
public static void main(String[] args) {
//文件取出字符流对象(输入流)
FileReader fr = null;
//写入到文件(输出流)
FileWriter fw = null; //创建一个fr对象
try {
//创建输入对象
fr = new FileReader("F:\\tt\\test.txt");
//创建输出对象
fw = new FileWriter("D:\\练习\\test2.txt"); //读入到内存
int n = 0;//记录实际读取到的字符数
char c[] = new char[1024];
while ((n = fr.read(c)) != -1) {
//输入
// String s = new String(c,0,n);
// System.out.println(s);
//输出
//方法一:fw.write(c);
方法二://指定输出的起始位置
fw.write(c, 0, n);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭文件流
if (fr != null) {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
} if (fw != null) {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} }
}

9.缓冲字符流(提高了效率,直接操作String)

 /**
* 缓冲字符流操作
*/
package com.test2; import java.io.*; public class Demo11_6 {
public static void main(String[] args) {
BufferedReader br = null;
BufferedWriter bw = null; //先创建FileReader对象
FileReader fr = null; //创建FileWriter对象
FileWriter fw = null;
try {
fr = new FileReader("F:\\tt\\test.txt");
br = new BufferedReader(fr); fw = new FileWriter("D:\\练习\\test3.txt");
bw = new BufferedWriter(fw); //循环读取文件
String s = "";
while ((s = br.readLine()) != null) {
//读取到内存
//System.out.println(s); //输出到磁盘
bw.write(s+"\r\n");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//注:如果文件流不关闭的话会影响后续对该文件的操作,比如可能读不到该文件的数据
if (br != null) {
try {
{
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
} if (bw != null) {
try {
{
bw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

JAVA IO流编程 实现文件的写入、写出以及拷贝的更多相关文章

  1. Java IO流中 File文件对象与Properties类(四)

    File类 用来将文件或目录封装成对象 方便对文件或目录信息进行处理 File对象可以作为参数传递给流进行操作 File类常用方法 创建 booleancreateNewFile():创建新文件,如果 ...

  2. java Io流输出指定文件的内容

    package com.hp.io; import java.io.*; public class  BufferedReaderTest{ /** *@param   想想 */ public st ...

  3. java IO流实现删除文件夹以及文件夹中的内容

    这篇主要是对IO文件流对文件常用处理中的删除文件夹,平时我们直接删除文件夹既可以删除里面的全部内容. 但是java在实现删除时,只能是文件才会被删除. 所以这里需要定义一个方法,来递归调用方法(递归调 ...

  4. Java IO流之普通文件流和随机读写流区别

    普通文件流和随机读写流区别 普通文件流:http://blog.csdn.net/baidu_37107022/article/details/71056011 FileInputStream和Fil ...

  5. java io流 创建文件、写入数据、设置输出位置

    java io流 创建文件 写入数据 改变system.out.print的输出位置 //创建文件 //写入数据 //改变system.out.print的输出位置 import java.io.*; ...

  6. Java:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...

  7. java io流(字节流)复制文件

    java io流(字节流) 复制文件 //复制文件 //使用字节流 //复制文本文件用字符流,复制其它格式文件用字节流 import java.io.*; public class Index{ pu ...

  8. 文件传输基础——Java IO流

    一.文件的编码 package com.study.io; /** * 测试文件编码 */ public class EncodeDemo { /** * @param args * @throws ...

  9. 【Android】数据存储-java IO流文件存储

    1.数据持久化:将在内存中的瞬时数据保存在存储设备中.瞬时数据:设备关机数据丢失.持久化技术提供一种机制可以让数据在瞬时状态和持久状态之间转换. 2.Android中简单的三种存储方式:文件存储.Sh ...

随机推荐

  1. Spring里的Async注解实现异步操作

    异步执行一般用来发送一些消息数据,数据一致性不要求太高的场景,对于spring来说,它把这个异步进行了封装,使用一个注解就可以实现. 用法 程序启动时开启@EnableAsync注解 建立新的类型,建 ...

  2. 『备注』GDI+ 绘制文本有锯齿,透明背景文本绘制

    背景: GDI+ 绘制文本 时,如果 背景是透明的 —— 则会出现 锯齿. //其实,我不用这三个 属性 好多年了 //而且,这三个属性 在关键时刻还有可能 帮倒忙 //关键是:这三个属性,鸟用都没有 ...

  3. 驰骋工作流引擎-流程数据md5加密

    关键字:工作流程数据加密  md5  数据保密流程数据防篡改软加密设置方式: 对工作流引擎的数据加密研究, 流程数据的加密方案与实现过程.输入图片说明需求背景1, 流程数据加密是为了防止流程数据被篡改 ...

  4. arcgis api 3.x for js 入门开发系列二十二地图模态层(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  5. 对比 Git 与 SVN,这篇讲的很易懂

    ---恢复内容开始--- 欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯工蜂发表于云+社区专栏 导语 本文从 Git 与 SVN 的对比入手,介绍如何通过 Git-SVN 开始 ...

  6. MsSql去掉重复记录

    假如有这样一张表news:字段:id,title,time,image,author,现在表中有1万多条记录,其中title重复的有上千条.如何才能一次性将title重复记录删除呢? ID Title ...

  7. 和我一起学习爬虫之HTTP/HTTPS抓包工具--Fiddler

    HTTP/HTTPS抓包工具--Fiddler Fiddler[ˈfɪdlə(r)] 1. HTTP代理神器Fiddler Fiddler是一款强大Web调试工具,它能记录所有客户端和服务器的HTTP ...

  8. Linux iptables用法与NAT

    1.相关概念 2.iptables相关用法 3.NAT(DNAT与SNAT) 相关概念 防火墙除了软件及硬件的分类,也可对数据封包的取得方式来分类,可分为代理服务器(Proxy)及封包过滤机制(IP ...

  9. win10修改cmd默认输入法为英文

    每次打开cmd窗口输入东西后,按下空格,输入的英文就会变为中文,感觉十分不爽,网上找了很多解决办法,由于系统升级了,都没有效果,今天记录一下解决方法: 1.点击任务栏输入法,打开“语言首选项”,如图: ...

  10. WebSocket整合SSM(Spring,Struts2,Maven)

    一.WebSocket与HTTP长轮询 WebSocket 属于HTML5 规范的一部分,提供的一种在单个 TCP 连接上进行全双工通讯的协议.允许服务端主动向客户端推送数据.在 WebSocket ...