标签:
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("xxx.txt"); //创建流对象
int b;
while((b=fis.read())!=-1){ //从硬盘上读取一个字节,读到文件结尾,返回-1
System.out.println(b);
}
fis.close(); //关闭流对象
}
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("yyy.txt"); //创建流对象
int b;
while((b=fis.read())!=-1){ //从硬盘上读取一个字节,读到文件结尾,返回-1
System.out.println(b); //这里读取的一个字节,前面补24个0,凑成4个字节,转为int
}
fis.close(); //关闭流对象
FileOutputStream fos = new FileOutputStream("yyy.txt"); //创建写流对象,如果文件不存在,则创建
fos.write(97); //写入一个字节,写入时会去掉前面补的24个0,则作为一个字节存入
fos.write(98);
fos.write(99);
fos.close();
}
FileOutputStream在创建对象的时候,如果没有这个文件就帮我创建出来,如果有这个文件,就会先将文件清空,再写入。在第二个参数传true,则是继续追加。
IO流核心代码:
FileInputStream fis = new FileInputStream("致青春.mp3"); //创建输入流对象,关联致青春.mp3
FileOutputStream fos = new FileOutputStream("copy.mp3");//创建输出流对象,关联copy.mp3
int b;
while((b = fis.read()) != -1) {
fos.write(b);
}
fis.close();
fos.close();
//一次性读取到字节数组中,但是当文件过大时,会发生内存溢出
FileInputStream fis = new FileInputStream("致青春.mp3");
FileOutputStream fos = new FileOutputStream("copy.mp3");
byte[] arr = new byte[fis.available()]; //根据文件大小做一个字节数组
fis.read(arr); //将文件上的所有字节读取到数组中
fos.write(arr); //将数组中的所有字节一次写到了文件上
fis.close();
fos.close();
A:案例演示
字节流一次读写一个字节数组复制图片和视频
FileInputStream fis = new FileInputStream(“致青春.mp3”);
FileOutputStream fos = new FileOutputStream(“copy.mp3”);
int len;
byte[] arr = new byte[1024 * 8]; //自定义字节数组,1024的整数倍
while((len = fis.read(arr)) != -1) {
//fos.write(arr);
fos.write(arr, 0, len); //写出字节数组写出有效个字节个数
}
fis.close();
fos.close();
D.拷贝的代码
FileInputStream fis = new FileInputStream("致青春.mp3"); //创建文件输入流对象,关联致青春.mp3
BufferedInputStream bis = new BufferedInputStream(fis); //创建缓冲区对fis装饰
FileOutputStream fos = new FileOutputStream("copy.mp3"); //创建输出流对象,关联copy.mp3
BufferedOutputStream bos = new BufferedOutputStream(fos); //创建缓冲区对fos装饰
int b;
while((b = bis.read()) != -1) {
bos.write(b);
}
bis.close(); //只关装饰后的对象即可
bos.close();
E.小数组的读写和带Buffered的读取哪个更快?
/**
* 字节流操作中文,可能出现乱码
* 读的时候,会出现乱码,但是写的时候没事
* 解决办法:字符流操作
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//Demo1();
FileOutputStream fos = new FileOutputStream("yyy.txt");
fos.write("你好你好啦啦啦".getBytes());
fos.write("\r\n".getBytes());
}
private static void Demo1() throws FileNotFoundException, IOException {
FileInputStream fis = new FileInputStream("xxx.txt");
FileOutputStream fos = new FileOutputStream("yyy.txt");
byte[] arr = new byte[4];
int len;
while((len=fis.read(arr))!=-1){
fos.write(arr,0,len);
System.out.println(new String(arr,0,len));
}
fis.close();
fos.close();
}
try finally嵌套,,,尽可能关闭流
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream("aaa.txt");
fos = new FileOutputStream("bbb.txt");
int b;
while((b = fis.read()) != -1) {
fos.write(b);
}
} finally {
try {
if(fis != null)
fis.close();
}finally {
if(fos != null)
fos.close();
}
}
public class Demo5_FileInputStream {
public static void main(String[] args) throws Exception {
try(
FileInputStream fis = new FileInputStream("xxx.txt");
FileOutputStream fos = new FileOutputStream("yyy.txt");
MyClose mc = new MyClose();
){
int b;
while((b=fis.read())!=-1){
fos.write(b);
}
}
//把流写在try的()里,{}执行完,会自动关闭,
//因为FileInputStream,FileOutputStream都实现了AutoCloseable里的close(),
//所以我自定义MyClose类,实现AutoCloseable里的close(),也可以自动关闭了。
}
}
class MyClose implements AutoCloseable{
@Override
public void close() throws Exception {
System.out.println("我关了");
}
}
给图片加密
将写出的字节异或上一个数,这个数就是秘钥,解密的时候再异或上这个数就可以了。
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(“a.jpg”));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(“b.jpg”));
int b;
while((b = bis.read()) != -1) {
bos.write(b ^ 123);
}
bis.close();
bos.close();
package com.hongwei.FileStream;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
public class Demo6_FileInputStream {
/**
* 在控制台录入文件的路径,将文件拷贝到当前项目下
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
File file = getFile();
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file.getName()));
int len;
byte[] arr =new byte[8192];
while((len=bis.read(arr))!=-1){
bos.write(arr,0,len);
}
bos.close();
bis.close();
}
public static File getFile(){
System.out.println("请输入文件路径:");
Scanner sc = new Scanner(System.in);
while(true){
String line = sc.nextLine();
File file = new File(line);
if(!file.exists()){
System.out.println("文件路径不存在!请重新输入文件路径:");
}else if(file.isDirectory()){
System.out.println("您输入的是文件夹,请重新输入文件路径:");
}else{
return file;
}
}
}
}
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
FileOutputStream fos = new FileOutputStream("text.txt");
System.out.println("请输入数据:");
while(true){
String line = sc.nextLine();
if("quit".equals(line)){
break;
}else{
fos.write(line.getBytes());
fos.write("\r\n".getBytes());
}
}
fos.close();
}
fos.close();
字节流-FileInputStream_FileOutputStream_BufferedInputStream_BufferedOutputStream
标签:
原文地址:http://blog.csdn.net/u013217071/article/details/51610780