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 ...
随机推荐
- 从YOLOv1到v3的进化之路
引言:如今基于深度学习的目标检测已经逐渐成为自动驾驶,视频监控,机械加工,智能机器人等领域的核心技术,而现存的大多数精度高的目标检测算法,速度较慢,无法适应工业界对于目标检测实时性的需求,这时YOLO ...
- PyQt5嵌入matplotlib动画
# -*- coding: utf-8 -*- import sys from PyQt5 import QtWidgets import numpy as np from matplotlib.ba ...
- captcha.js一个生成验证码的插件,使用js和canvas生成
一.captcha`captcha.js`是一个生成验证码的插件,使用js和canvas生成的,确保后端服务被暴力攻击,简单判断人机以及系统的安全性,体积小,功能多,支持配置. 验证码插件内容,包含1 ...
- flutter初体验
flutter初体验 和flutter斗争了两个周末,基本弄清楚了这个玩意的布局和一些常用组件了. 在flutter里面,所有东西都是组件Widget.我们像拼接积木一样拼接Widget,拼接的关键词 ...
- Python调用ansible API系列(三)带有callback的执行adhoc和playbook
在第二篇文章中虽然可以执行adhoc和playbook但是执行结果的输出并不是特别直观,虽然没有报错但是到底什么结果其实你是不知道的尤其是在执行adhoc的时候,这时候我们要利用callback来设置 ...
- android事件分发源码分析—笔记
昨天晚上从源码角度复习了一下android的事件分发机制,今天将笔记整理下放在网上.其实说复习,也是按着<android开发艺术探索>这本书作者的思路做的笔记. 目录 事件是如何从Acti ...
- sublime text3快速生成html时,tab键失效
sublime tab键失效
- 涨姿势:抛弃字母、数字和下划线写SHELL
PHP中异或 (^) 的概念 <?php echo"A"^"?";?> <?php echo"A"^"?&quo ...
- 【原】Java学习笔记034 - 网络
package cn.temptation; import java.net.InetAddress; public class Sample01 { public static void main( ...
- Leetcode 136.只出现一次的数字 By Python
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [ ...
