JAVA IO流编程 实现文件的写入、写出以及拷贝
一、流的概念
流:数据在数据源(文件)和程序(内存)之间经历的路径。
输入流:数据从数据源(文件)到程序(内存)的路径。
输出流:数据从程序(内存)到数据源(文件)的路径。
以内存为参照,如果数据向内存流动,则是输入流,反之则是输出流
字节流: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流编程 实现文件的写入、写出以及拷贝的更多相关文章
- Java IO流中 File文件对象与Properties类(四)
File类 用来将文件或目录封装成对象 方便对文件或目录信息进行处理 File对象可以作为参数传递给流进行操作 File类常用方法 创建 booleancreateNewFile():创建新文件,如果 ...
- java Io流输出指定文件的内容
package com.hp.io; import java.io.*; public class BufferedReaderTest{ /** *@param 想想 */ public st ...
- java IO流实现删除文件夹以及文件夹中的内容
这篇主要是对IO文件流对文件常用处理中的删除文件夹,平时我们直接删除文件夹既可以删除里面的全部内容. 但是java在实现删除时,只能是文件才会被删除. 所以这里需要定义一个方法,来递归调用方法(递归调 ...
- Java IO流之普通文件流和随机读写流区别
普通文件流和随机读写流区别 普通文件流:http://blog.csdn.net/baidu_37107022/article/details/71056011 FileInputStream和Fil ...
- java io流 创建文件、写入数据、设置输出位置
java io流 创建文件 写入数据 改变system.out.print的输出位置 //创建文件 //写入数据 //改变system.out.print的输出位置 import java.io.*; ...
- Java:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...
- java io流(字节流)复制文件
java io流(字节流) 复制文件 //复制文件 //使用字节流 //复制文本文件用字符流,复制其它格式文件用字节流 import java.io.*; public class Index{ pu ...
- 文件传输基础——Java IO流
一.文件的编码 package com.study.io; /** * 测试文件编码 */ public class EncodeDemo { /** * @param args * @throws ...
- 【Android】数据存储-java IO流文件存储
1.数据持久化:将在内存中的瞬时数据保存在存储设备中.瞬时数据:设备关机数据丢失.持久化技术提供一种机制可以让数据在瞬时状态和持久状态之间转换. 2.Android中简单的三种存储方式:文件存储.Sh ...
随机推荐
- 开源)嗨,Java,你可以生成金山词霸的二维码分享海报吗?
As long as you can still grab a breath, you fight.只要一息尚存,就不得不战. 有那么一段时间,我特别迷恋金山词霸的每日一句分享海报.因为不仅海报上的图 ...
- WinForm的DataGirdView判断CheckBox是否被选中
首先我们先设置下DataGirdView的列. 然后启动下编辑,就可以选中与不选中了.在之后通过. #region 便利被选中的行,然后导出 DataTable dtreport = new Data ...
- Asp.Net Core中HttpClient的使用方式
在.Net Core应用开发中,调用第三方接口也是常有的事情,HttpClient使用人数.使用频率算是最高的一种了,在.Net Core中,HttpClient的使用方式随着版本的升级也发生了一些变 ...
- H5单张、多张图片保存续篇
前言 这篇是接上篇内容.还没看的可以看H5单张.多张图片上传这篇文章预热. 图片入库 本章我们就来看看如何让多种图片保存至数据库中.数据库:mysql 后端:.NET Core 我们回顾一下上篇我 ...
- 分享一个.NET平台开源免费跨平台的大数据分析框架.NET for Apache Spark
今天早上六点半左右微信群里就看到张队发的关于.NET Spark大数据的链接https://devblogs.microsoft.com/dotnet/introducing-net-for-apac ...
- centos7 ambari安装HDP
环境介绍:操作系统为Centos7.1:测试设备全部为内网设备,不通公网,所以需要配置本地yum源: 首先安装ansible工具,用来批量安装ambari.java以及基础的一些配置: 一. 免密钥登 ...
- alter session set current_schema=Schema
使用CURRENT_SCHEMA之后,当前会话所参考的默认SCHEMA变为设置的用户,而不再是当前的用户:其实需要稍微理解一下user和schema的区别先:user即oracle中的用户,和所有系统 ...
- 【SQL Server】利用游标将学生表中的成绩转化为绩点
软件工程综合实践第一次作业 代码来源:班上同学的数据库大作业 alter table sc add GPA float; --加入绩点列 alter table sc ,);--将表按原始位置顺序编号 ...
- 从0到1打造自己的VOIP网络电话系统(基于FreePBX)
从0到1打造自己的网络电话系统 最近流量卡越来越便宜了,看看自己手里的"坑不死老用户"的联通卡,顿时感觉到深深的恶意,但是iPhone没有双卡功能,所以只好自己动手打造一个网络电话 ...
- String、StringBuffer和StringBuilder类的区别
Java提供了String.StringBuffer和StringBuilder类来封装字符串,并提供了一系列操作字符串对象的方法. 它们的相同点是都用来封装字符串:都实现了CharSequence接 ...