I/O流测试

java中的输入输出流

I/O流是一个数据传输通道。可以通过这条通道将数据传输到目标。
输入流(InputStream)指向的对象是源,输入的理解根据内存为参考,从硬盘等存储设备读取资源到内存中叫做输入(到内存).
输出流(OutputStream)指向的对象叫做目标,输出的理解根据内存为参考,从内存中读取数据到硬盘等存储设备中叫做输出(到内存).

言归正传,今天我复习了一下I/O流。简单地理解概念之后,我根据之前的代码进行了简单的复习。首先是对File类的测试。首先是测试File的方法,这个类的方法有很多,挑一些常用的进行了测试.
File类没有无参的构造方法,需要一个入参为String类的构造方法。这个String类对象就是文件在系统中的绝对路径.
File file = new File("D:\\shxt2\\test.txt");
之后,我们的类方法都是围绕这个文件展开的,我们可以查看这个文件的绝对路径,相对路径,上一级目录等等.具体的方法和代码都在下方.
/**
package com.xt.java.io;
import java.io.File;
import java.io.IOException;
public class Main {
public static void main (String[] args) throws IOException {
File file = new File("D:\\shxt2\\test.txt");
System.out.println("file---->"+file);//输出文件的绝对路径名
System.out.println("file---->"+file.getName());//输出文件名
System.out.println("file---->"+file.getParent());//输出上一级目录名
System.out.println("file---->"+file.getAbsoluteFile());
System.out.println("file---->"+file.exists());
}
}
*/

之后是对文件的简单操作,我们可以创建文件夹以及具体的文件(例如txt文件).
关于创建文件夹的方法,我进行了测试.
/**
File file = new File("D://shxt2//temp//text");
System.out.println("mkdir-------->"+file.mkdir());//创建单个文件夹
System.out.println("mkdir-------->"+file.mkdirs());//创建多个文件夹
*/
可以看出,创建文件夹的方法有两个,当我们只需要创建一个文件夹时,采用的是mkdir(),创建多个文件夹时,需要的是mkdirs().
当然在创建txt文件时,需要的是另一个方法。
/**
public void createNewFile() throws IOException{
File file = new File("D://shxt2//temp//text//text.txt");
System.out.println("文件名为:\t"+file.getName()+",创建是否成功: \t"+file.createNewFile());
}
*/
createNewFile()方法,如果这个文件之前没有被创建就会创建一个这样的文档.
我们还可以查看一个文件夹下面所有的目录,这个调用的是File类的list()方法,返回的是一个String数组.
/**
public void dir(){//输出该文件夹下所有的文件夹
File file = new File("D:\\shxt2");
for(String fileName : file.list()){
System.out.println(fileName);
}
// for(File subFile: file.listFiles()){
// System.out.println(subFile.getName());
// }
}
*/
-----------------------------------------------------------------
下面,我将用I/O流实现文件的读取和写入。
我们可以采用字节流或者字符流读取文件,一个字符等于两个字节,所以字符流可以读取的文件字节流都可以进行读取.而且读取的方法是很类似的.以字节流为例,在文件的读取时(InputStream).
/**InputStream is = new FileInputStream(file);*/
之后需要一个创建一个字节数组,这个数组类似于一个中间容器,反复地从目标(file)中读取字节然后输入到内存中.这个数组一般大小都是4096(4k)
但是我们怎样判断是否将文件读完呢?
这就是和file的read()方法有关了.当我们将文件读取完成时,这个方法的返回值会变成-1.所以我们需要一个循环即可.
/**
public void readByInputStream() throws IOException {
File file = new File("D://shxt2//temp//text//text.txt");
byte[] bs = new byte[4096];
InputStream is = new FileInputStream(file);
int n = 0;
while ((n = is.read(bs)) != -1) {
String str = new String(bs,0,0,n);
System.out.println("--->"+new String(str.getBytes("ISO-8859-1"),"GBK"));//字符转码.

}
is.close();
}
*/
当然字符流的方法也是类似的,大家可以根据代码进行参考.
/**
public void readByReader() throws IOException{
    File file = new File("D://shxt2//temp//text//text.txt");
    char[] cs = new char[4096];
    Reader reader = new FileReader(file);
    int n =0;
    while((n=reader.read(cs))!=-1){
    String str= new String(cs,0,n);
    System.out.println("--->"+new String(str.getBytes("ISO-8859-1"),"UTF-8"));
    }
    reader.close();
    }
*/
下面我想讲讲输出流(OutputStream),这个是将字节流从内存写到硬盘等存储设备中.
OutputStream os = new FileOutputStream(file,true);
之后调用write(byte b[])方法将字节写入.然后将文件保存,将流关闭
/**
File file = new File("D://shxt2//temp//text//test.txt");
    OutputStream os = new FileOutputStream(file,true);
    os.write("我来自中华人民共和国".getBytes());
    os.flush();
    os.close();
*/
关于字节流和字符流,我建议使用字节流.很明显字节流适用所有的文件,而字符流只适合文档这类文件.
最后,我写了两个测试文件是文件的剪切和复制.
/**
package com.xt.java.io;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;


public class CopyTest {

public InputStream getInputStream(File source) throws Exception{
if(source.exists()){
return new FileInputStream(source);
}
return null;
}
public OutputStream getOutputStream(File target) throws IOException{
if(target.exists()){
return new FileOutputStream(target,true);
}
return null;
}
public void writeIntoTargetFile(File source,File target) throws Exception{
InputStream is = getInputStream(source);

OutputStream os =getOutputStream(target);
byte[] bs = new byte[4096];
int n = 0;
while((n=is.read(bs))!=-1){
String str = new String(bs,0,0,n);
str = new String(str.getBytes("ISO-8859-1"),"GBK");
os.write(str.getBytes());
os.flush();
}
os.close();
is.close();
}
public static void main(String[] args) throws Exception{
File source = new File("D://shxt2//temp//text//copy//source.txt");
File target = new File("D://shxt2//temp//text//copy//target.txt");
CopyTest ct = new CopyTest();
ct.writeIntoTargetFile(source,target);
}
}

*/


/**
package com.xt.java.io;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;


public class ShearTest {
public InputStream getInputStream(File source) throws Exception{
if(source.exists()){
return new FileInputStream(source);
}
return null;
}
public OutputStream getOutputStream(File target) throws IOException{
if(target.exists()){
return new FileOutputStream(target,true);
}
return null;
}
public void writeIntoTargetFile(File source,File target) throws Exception{
InputStream is = getInputStream(source);

OutputStream os =getOutputStream(target);
byte[] bs = new byte[4096];
int n = 0;
while((n=is.read(bs))!=-1){
String str = new String(bs,0,0,n);
str = new String(str.getBytes("ISO-8859-1"),"GBK");
os.write(str.getBytes());
os.flush();
}
source.deleteOnExit();
os.close();
is.close();
}
public static void main(String[] args) throws Exception{
File source = new File("D://shxt2//temp//text//shear//source.txt");
File target = new File("D://shxt2//temp//text//shear//target.txt");
ShearTest st = new ShearTest();
st.writeIntoTargetFile(source, target);
}
}

*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值