关于文件输入输出对象的初步理解。
2012-02-29 16:55
176 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010530411/article/details/84160876
关于输入和输出是以内存为对象的,把内存外部的东西调入内存即为输入,将内存里面的内容储存到硬盘等操作则为输出。
内存和硬盘就好比两个储水的容器,所以要实现里面的内容互换,就必须要管道连接,这就是输入和输出流对象的作用。
以代码为例:
package io0222mwj;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class FileTest {
public static void main(String args[]) {
String path = "d:\\aa\\jdk1.6.CHM";
String path1 = "d:\\aa\\复制jdk1.6.CHM";
// 读取文件,得到读取的字符串
byte[] bs = FileTest.readFile(path);
FileTest.writeFile(path1,bs);
long start=System.currentTimeMillis();
FileTest.copyFile2Buffer(path,path1);
long end=System.currentTimeMillis();
long result=end-start;
System.out.println("复制完毕,耗费:"+result+"ms");
}
/**
* 读取文件
* @param path
* 要读取文件的地址
* @return
*/
public static byte[] readFile(String path){
try{
//根据文件地址创建一个文件输入流
java.io.FileInputStream fis=new java.io.FileInputStream(path);
//得到流中的字节数
int size=fis.available();
//定义一个数组,用来存储读取的字节
byte[] bs=new byte[size];
int i=0;
//读取一个字节
int t=fis.read();
while (t!=-1){
//将读取的字节放入数组
bs[i]=(byte)t;
i++;
//读取下一个字节
t=fis.read();
}
//将字节数组包装成字符串
//String str=new String(bs)
//String.out.println(str)
fis.close();
return bs;
} catch (Exception ef){
ef.printStackTrace();
}
return null;
}
/**
* 将读取的文件内容写入指定的文件
* @param path
* 写入的文件
* @param bs
* 已读取、要写入的数据
*/
public static void writeFile(String path,byte[] bs){
try{
//创建文件输出流
java.io.FileOutputStream fos=new java.io.FileOutputStream(path);
for(int i=0;i<bs.length;i++){
byte b=bs[i];
//写出字节
fos.write(b);
}
//强制输出
fos.flush();
//关闭流
fos.close();
}catch(Exception ef){
ef.printStackTrace();
}
}
/**
* 拷贝文件的方法
* @param src
* 要拷贝的源文件地址
* @param path
* 拷贝后的文件地址
*/
public static void copyFile(String src,String path){
try{
//创建文件输入流和输出流
FileInputStream fis=new FileInputStream(src);
FileOutputStream fos=new FileOutputStream(path);
//读取一个字节
int b=fis.read();
while(b!=-1){
//将读取的字节写到文件
fos.write(b);
//读取下一个字节
b=fis.read();
}
fos.flush();
fos.close();
fis.close();
}catch(Exception ef){
ef.printStackTrace();
}
}
public static void copyFile2Buffer(String src,String path){
try{
//创建文件输入输出流
FileInputStream fis=new FileInputStream(src);
FileOutputStream fos=new FileOutputStream(path);
//将文件包装成缓冲流
BufferedInputStream bis=new BufferedInputStream(fis);
BufferedOutputStream bos=new BufferedOutputStream(fos);
//读取一个字节
int b=bis.read();
while(b!=-1){
//将读取的字节写到文件
bos.write(b);
//读取下一个字节
b=bis.read();
}
fos.flush();
fos.close();
fis.close();
}catch(Exception ef){
ef.printStackTrace();
}
}
}
注意点:byte可以自动转成int,因为需要无符号的字节;
每个方法都只会执行到return,就不会执行了
内存和硬盘就好比两个储水的容器,所以要实现里面的内容互换,就必须要管道连接,这就是输入和输出流对象的作用。
以代码为例:
package io0222mwj;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class FileTest {
public static void main(String args[]) {
String path = "d:\\aa\\jdk1.6.CHM";
String path1 = "d:\\aa\\复制jdk1.6.CHM";
// 读取文件,得到读取的字符串
byte[] bs = FileTest.readFile(path);
FileTest.writeFile(path1,bs);
long start=System.currentTimeMillis();
FileTest.copyFile2Buffer(path,path1);
long end=System.currentTimeMillis();
long result=end-start;
System.out.println("复制完毕,耗费:"+result+"ms");
}
/**
* 读取文件
* @param path
* 要读取文件的地址
* @return
*/
public static byte[] readFile(String path){
try{
//根据文件地址创建一个文件输入流
java.io.FileInputStream fis=new java.io.FileInputStream(path);
//得到流中的字节数
int size=fis.available();
//定义一个数组,用来存储读取的字节
byte[] bs=new byte[size];
int i=0;
//读取一个字节
int t=fis.read();
while (t!=-1){
//将读取的字节放入数组
bs[i]=(byte)t;
i++;
//读取下一个字节
t=fis.read();
}
//将字节数组包装成字符串
//String str=new String(bs)
//String.out.println(str)
fis.close();
return bs;
} catch (Exception ef){
ef.printStackTrace();
}
return null;
}
/**
* 将读取的文件内容写入指定的文件
* @param path
* 写入的文件
* @param bs
* 已读取、要写入的数据
*/
public static void writeFile(String path,byte[] bs){
try{
//创建文件输出流
java.io.FileOutputStream fos=new java.io.FileOutputStream(path);
for(int i=0;i<bs.length;i++){
byte b=bs[i];
//写出字节
fos.write(b);
}
//强制输出
fos.flush();
//关闭流
fos.close();
}catch(Exception ef){
ef.printStackTrace();
}
}
/**
* 拷贝文件的方法
* @param src
* 要拷贝的源文件地址
* @param path
* 拷贝后的文件地址
*/
public static void copyFile(String src,String path){
try{
//创建文件输入流和输出流
FileInputStream fis=new FileInputStream(src);
FileOutputStream fos=new FileOutputStream(path);
//读取一个字节
int b=fis.read();
while(b!=-1){
//将读取的字节写到文件
fos.write(b);
//读取下一个字节
b=fis.read();
}
fos.flush();
fos.close();
fis.close();
}catch(Exception ef){
ef.printStackTrace();
}
}
public static void copyFile2Buffer(String src,String path){
try{
//创建文件输入输出流
FileInputStream fis=new FileInputStream(src);
FileOutputStream fos=new FileOutputStream(path);
//将文件包装成缓冲流
BufferedInputStream bis=new BufferedInputStream(fis);
BufferedOutputStream bos=new BufferedOutputStream(fos);
//读取一个字节
int b=bis.read();
while(b!=-1){
//将读取的字节写到文件
bos.write(b);
//读取下一个字节
b=bis.read();
}
fos.flush();
fos.close();
fis.close();
}catch(Exception ef){
ef.printStackTrace();
}
}
}
注意点:byte可以自动转成int,因为需要无符号的字节;
每个方法都只会执行到return,就不会执行了
相关文章推荐
- java 关于中文字的输出 输入 和文件操作(对象序列化)
- R语言关于脚本文件的输入和输出 sink函数生动
- 【随笔】关于算法竞赛中使用文件输入输出和文件名的规定等问题
- 关于一道J笔试或者机试题的Java实现:从键盘输入一串字符,翻转后输出(要求不使用string相关类即对象)
- 关于在命令行进行文件输入输出重定向的小笔记
- R语言关于脚本文件的输入和输出
- labview下关于文件输入输出io口的操作
- 关于一道J笔试或者机试题的Java实现:从键盘输入一串字符,翻转后输出(要求不使用string相关类即对象)
- 关于用c语言来实现txt文件的输入输出问题
- MyBatis(三)配置文件,输入输出映射,动态SQL
- 关于“用父类创建对象而用子类初始化”的理解
- 文件输入输出以及定位、序列化
- 第二周第三天([输入一个字符串,然后输出字符串的运算结果] [object][异常][IO流,读取D盘某个文件])
- 关于各种输入输出流的二次理解总结 ,以及输入的三种方法总结。
- 文件输入/输出
- 关于C++中在函数中按值返回、临时对象、拷贝构造函数的一点理解
- android 对象输出到文件
- 开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。
- android的文件系统结构及其引导过程的初步理解
- C++之简单文件的输入与输出