一、字节流

FileOutputStream是OutputStream 的直接子类
FileInputStream也是InputStream的直接子类

二、文本文件的读写

2.1、字节输入流

Test.txt文件内容
abcdefg
package com.pb.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException; /*
* FileInputStreamDemo读取文件
*/
public class FileInputStreamDemo1 { public static void main(String[] args) {
//1.声明文件对象,也可以跳过此步直接在第2步中写
File f=new File("d:"+File.separator+"test"+File.separator+"test.txt");
//FileInputStream fis=new FileInputStream("d:/test/hello.txt");
try {
//2.创建FileInputStream对象并将file对象传入
FileInputStream fis=new FileInputStream(f);
//3.定义整型变量用来存放内容
int date;
//4先查看文件可以读取的字节类available()方法获取文件的字节数
System.out.println("可读取的字节数:"+fis.available());
System.out.println("=========开始读取文件==========");
//5读取文件read()方法
System.out.println("========没有转换前输出=======");
while((date=fis.read())!=-1){ //!=-1说明文件还有内容=-1时,就说明文件内容读完结束 System.out.println(date+"\t"); }
System.out.println("=======文件读取结束=========");
//关闭流
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} } }

结果:

可读取的字节数:7
=========开始读取文件==========
========没有转换前输出=======
97
98
99
100
101
102
103
=======文件读取结束=========

结果:并不是文件中的内容

修改上面的文件:

package com.pb.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException; /*
* FileInputStreamDemo读取文件
*/
public class FileInputStreamDemo1 { public static void main(String[] args) {
//1.声明文件对象,也可以跳过此步直接在第2步中写
File f=new File("d:"+File.separator+"test"+File.separator+"test.txt");
//FileInputStream fis=new FileInputStream("d:/test/hello.txt");
try {
//2.创建FileInputStream对象并将file对象传入
FileInputStream fis=new FileInputStream(f);
//3.定义整型变量用来存放内容
int date;
//4先查看文件可以读取的字节类available()方法获取文件的字节数
System.out.println("可读取的字节数:"+fis.available());
System.out.println("=========开始读取文件==========");
//5读取文件read()方法
System.out.println("========转换后转出=======");
while((date=fis.read())!=-1){ //!=-1说明文件还有内容=-1时,就说明文件内容读完结束
char c=(char)date;
System.out.println(c+"\t");
}
System.out.println("=======文件读取结束=========");
//6.关闭流
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} } }

结果:

可读取的字节数:7
=========开始读取文件==========
========转换后转出=======
a
b
c
d
e
f
g
=======文件读取结束=========

小结:FileInputStream

1.read()读取内容,是返回int值

2.需要转换字符

3.read()方法是单程的,

4.一定要关闭流

2.2、字节输出流

package com.pb.io;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner; public class FileOutputStreamDemo1 { public static void main(String[] args) { try {
//1.实例化FileOutputStream对象,在文件的末尾追加内容
FileOutputStream fos=new FileOutputStream("d:/test/test.txt",true);
//2.创建他写入的字符串
Scanner input=new Scanner(System.in);
System.out.println("请输入要写入文件的内容:");
String str=input.next();
//3.将内容转换为字节数组
byte[] bytes=str.getBytes();
//4.将内容写入
fos.write(bytes,0,bytes.length); //3个参数的方法,从0开始到数组结束的全部写入
System.out.println("文件写入结束!");
//5.关闭流
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }

结果:

请输入要写入文件的内容:输入e结束
好好学习,天天向上 hello java!
文件写入结束!

test.txt

abcdefg好好学习,天天向上

在进行写操作时,如果文件不存在,将自动创建这个文件,如果上面没test.txt,将会自动创建这个文件,可以试下,将文件删除再运行

三、综合使用

package pb.io.file;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner; /**
* 拷贝文件
* @author 北大青鸟
*
*/
public class CopyFile { public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int date=0;
System.out.print("请输入您要拷贝的源文件:");
String file1=input.next();
System.out.print("请输入您要拷贝的目标位置:");
String file2=input.next();
try {
FileInputStream fis = new FileInputStream(file1);
FileOutputStream fos = new FileOutputStream(file2);
while((date=fis.read())!=-1){//读取文件
  char c=(char)date;
         fos.write(c);
}
fis.close();
fos.close();
System.out.println("拷贝成功!");
} catch (FileNotFoundException e) {
System.out.println("源文件未找到!");
} catch (IOException ex) {
System.out.println(ex.toString());
}
}
}

Java从零开始学三十五(JAVA IO- 字节流)的更多相关文章

  1. Java从零开始学三十八(JAVA IO- 重定向IO)

    一.三个静态变量 java.lang.System提供了三个静态变量 System.in(默认键盘) System.out(默认显示器) System.err 二.重写向方法 System提供了三个重 ...

  2. Java从零开始学三十三四(JAVA IO-流简述)

    一.流概念(stream) File类并不能对文件内容进行读写. 读文件就是指:把文件的内中的数据读取到内存中来 写文件就是指:把内存中的数据写入到文件中去. 通过什么读写文件呢?文件流. 1.1.流 ...

  3. Java从零开始学三十六(JAVA IO- 字符流)

    一.字符流 BufferedReader:BufferedReader是从缓冲区之中读取内容,所有的输入的字节数据都将放在缓冲区之中 BufferedWriter:把一批数据写入到缓冲区,当缓冲区区的 ...

  4. Java从零开始学四十五(Socket编程基础)

    一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...

  5. Java从零开始学三十九(对象序列化)

    一.序列化 将对象的状态存储到特定存储介质中的过程 对象序列化,就是把一个对象变为二进制的数据流的一种方法,通过对象序列化可以方便的实现对象的传输或存储.   序列化保存对象的“全景图”,构建对象的“ ...

  6. Java从零开始学三十二(正则表达式)

    一.为什么要有正则 正则表达式可以方便的对数据进行匹配,可以执行更加复杂的字符串验证.拆份.替换功能. 例如:现在要求判断一个字符串是否由数字组成,则可以有以下的两种做法: 不使用正则完成 使用正则完 ...

  7. Java从零开始学三十(String和StringBuffer类)

    一.StringBuffer连接字符操作 当一个字符串的内容需要被经常改变时就要使用StringBuffer 在StringBuffer中使用append()方法,完成字符串的连接操作   二.Str ...

  8. Java从零开始学二十五(枚举定义和简单使用)

    一.枚举 枚举是指由一组固定的常量组成的类型,表示特定的数据集合,只是在这个数据集合定义时,所有可能的值都是已知的. 枚举常量的名称建议大写. 枚举常量就是枚举的静态字段,枚举常量之间使用逗号隔开. ...

  9. Java进阶(三十五)java int与integer的区别

    Java进阶(三十五)java int与Integer的区别 前言 int与Integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而Integer是对象 ...

随机推荐

  1. 读书笔记_Effective_C++_条款三十三:避免遮掩继承而来的名称

    名称的遮掩可以分成变量的遮掩与函数的遮掩两类,本质都是名字的查找方式导致的,当编译器要去查找一个名字时,它一旦找到一个相符的名字,就不会再往下去找了,因此遮掩本质上是优先查找哪个名字的问题. 而查找是 ...

  2. 【转】Spring中事务与aop的先后顺序问题

    [原文链接] http://my.oschina.net/HuifengWang/blog/304188 [正文] Spring中的事务是通过aop来实现的,当我们自己写aop拦截的时候,会遇到跟sp ...

  3. 在IIS上部署基于django WEB框架的python网站应用

    django是一款基于python语言的WEB开源框架,本文给出了如何将基于django写的python网站部署到window的IIS上. 笔者的运行环境: Window xp sp3 IIS 5.1 ...

  4. Python threads synchronization: Locks, RLocks, Semaphores, Conditions, Events and Queues(Forwarding)

    This article describes the Python threading synchronization mechanisms in details. We are going to s ...

  5. mac 下 outlook 邮箱 服务器端口设置

  6. ConcurrentHashMap之实现细节

    ConcurrentHashMap是Java 5中支持高并发.高吞吐量的线程安全HashMap实现.在这之前我对ConcurrentHashMap只有一些肤浅的理解,仅知道它采用了多个锁,大概也足够了 ...

  7. JQuery实战--能够编辑的表格

    廊坊下雪了.15年的第二场雪.比14的来的稍晚一些.停靠在11教门前的自行车.成了廊坊师范学院最漂亮的风景线.还记得以前学习css的时候.就以前接触过怎样编写设计一些表格和表单的样式,比如怎样设计表格 ...

  8. 关于JSONP以及跨域相关

    什么是跨域: 浏览器对ajax请求的限制,不允许跨域请求资源. http://www.a.com--->http://www.b.com       是跨域 http://www.a.com-- ...

  9. mysqldump与source

    mysqldump示例 mysqldump --default-character-set=utf8 -d --opt -hlocalhost -uroot -p123456 --where=&quo ...

  10. 【BZOJ】【1178】【APIO2009】convention会议中心

    贪心 如果不考虑字典序的话,直接按右端点排序,能选就选,就可以算出ans…… 但是要算一个字典序最小的解就比较蛋疼了= = Orz了zyf的题解 就是按字典序从小到大依次枚举,在不改变答案的情况下,能 ...