java的IO学习,字节流与字符流的编码讲解

字节流与字符流

字节流可以处理所有类型的数据(图片、视频等),在java中对应的类都为“stream”结尾
1字节=8位二进制=具体存储空间
 
字符流仅能处理纯文本的数据,在java中对应的类都是以“reader”或者“writer”结尾
如汉字,符号等
 
 
 
import org.junit.Test; 

public class IOTest { 
 /**
  * BufferedInputStream BufferedOutputStream
  * 利用字节缓冲流实现文件的复制
  * @throws IOException
  * */
 @Test
 public void bufferedInputStreamAndbufferedOutputStream() throws IOException{
  //新建字节的输入输出
  InputStream in = new FileInputStream("hellow.txt");
  BufferedInputStream bStream = new BufferedInputStream(in);
 
  OutputStream out = new FileOutputStream("hellow2.txt");
  BufferedOutputStream bOutputStream = new BufferedOutputStream(out);
  //创建缓冲数组
  byte[] bytes = new byte[100];
  //进行复制
  int len = 0;
  while((len = bStream.read(bytes))!= -1)
  {
   bOutputStream.write(bytes, 0, len);
  }
  //关闭流
  bStream.close();
  bOutputStream.close();
 }
/**
  * bufferdeReader And bufferedWriter
  * 利用缓冲流实现文件的复制
  * @throws IOException
  * **/
 @Test
 public void bufferdeReaderAndbufferedWriter() throws IOException {
  // 新建字符的输入输出
  Reader in = new FileReader("hellow.txt");
  BufferedReader bReader = new BufferedReader(in);

  Writer out = new FileWriter("hellow2.txt");
  BufferedWriter bWriter = new BufferedWriter(out);
  // 进行复制
  String line = null;
  int i = 0;
  while ((line = bReader.readLine()) != null) {
   if (i != 0)
    bWriter.write("\n");
   bWriter.write(line, 0, line.length());
   i++;
  }
  // 关闭流
  bReader.close();
  bWriter.close();
 }

/**
 *reader writer
 * 利用字符输入输出流, 完成 hello.txt 文件的复制.
 * 把该文件复制为 hello2.txt  
 */

 @Test
 public void readerAndwriter() throws IOException {
  //新建字符的输入输出
  Reader reader = new FileReader("hellow.txt");
  Writer writer = new FileWriter("hellow2.txt");
  //定义数组,用于读写文件
  char[] cbuf = new char[100];
  //读写文件
  int len;
  while((len = reader.read(cbuf)) != -1)
  {
   writer.write(cbuf, 0, len);
  }
  //关闭流
  reader.close();
  writer.close();
 }

/**
*InputStream OutputStream  
* 利用字节输入输出流, 完成 hello.txt 文件的复制. 
* 把该文件复制为 hello2.txt 
* @throws IOException 
*/ 
@Test 
public void testCopyFile() throws IOException{ 
//1. 创建定位到 hello.txt 的文件的输入流 
InputStream in = new FileInputStream("枚举类.avi"); 

//2. 创建定位到 hello2.txt 的文件输出流 
OutputStream out = new FileOutputStream("枚举类2.avi"); 

//3. 创建一个 byte 数组, 用于读写文件 
byte [] buffer = new byte[1024 * 10]; 
int len = 0; 

//4. 读写文件: 
//in.read(buffer); out.write(buffer, 0, len); 
while((len = in.read(buffer)) != -1){ 
out.write(buffer); 
} 

//5. 关闭流资源. 
out.close(); 
in.close(); 
} 

/** 
* 测试字节输出流  OutputStream
* @throws IOException 
*/ 
@Test 
public void testOutputStream() throws IOException{ 
OutputStream out = new FileOutputStream("abcd.txt"); 

String content = "www.atguigu.com\nHello Java!"; 
out.write(content.getBytes()); 

out.close(); 
} 

/** 
* 测试字符输入流.  Reader
* @throws IOException 
*/ 
@Test 
public void testReader() throws IOException{ 
//利用字符输入流读取 hello.txt 文档的内容, 输出到控制台. 
Reader reader = new FileReader("hello.txt"); 

char [] buffer = new char[10]; 
int len = 0; 

while((len = reader.read(buffer)) != -1){ 
for(int i = 0; i < len; i++){ 
System.out.print(buffer[i]); 
} 
} 

reader.close(); 
} 

/** 
* 测试字节输入流 InputStream
* @throws IOException 
*/ 
@Test 
public void testInputStream() throws IOException{ 
//1. 创建了一个字节输入流. 
InputStream in = new FileInputStream("hello.txt"); 

//2. 读取文件的内容 
//2.1 第一读取一个字节. 效率很低, 不建议这样读. -1 表示读取到文件的结尾处 
//     int result = in.read(); 
//    
//     while(result != -1){ 
//     System.out.print((char)result); 
//     result = in.read(); 
//     } 

//2.2 一次读取一组: 一组字符. 
//返回一次实际读取的字节数, 若为 -1 表示读取到文件的结尾 
//     byte [] buffer = new byte[10]; 
//     int len = 0; 
//    
//     while((len = in.read(buffer)) != -1){ 
//     for(int i = 0; i < len; i++){ 
//     System.out.print((char)buffer[i]); 
//     } 
//     } 

//2.3 把内容读取到字节数组的部分连续的元素中. 
byte [] result = new byte[1024 * 10]; 
in.read(result, 10, in.available()); 

//3. 关闭流资源 
in.close(); 
} 

/** 
* File: 代表物理的意义的文件或目录 
* @throws IOException 
*/ 
@Test 
public void testFile() throws IOException{ 
//1. 创建 File 对象 
File file = new File("hello.txt"); 

//2. 测试 File 对象的方法. 
//2.1 文件名相关的方法 
String fileName = file.getName(); 
System.out.println(fileName); 

//2.2 访问文件的绝对路径 
String path = file.getAbsolutePath(); 
System.out.println(path); 

//2.3 为文件重命名 
//file.renameTo(new File("d:\\hello.txt")); 

//3. 文件检测相关的方法 
System.out.println(file.exists()); 
File dir = new File("atguigu"); 
System.out.println(dir.isFile()); 

//4. 获取文件的常规信息 
System.out.println(file.length()); 

//5. 文件操作相关. 
File file2 = new File("abcd.txt"); 
file2.createNewFile(); 
} 

} 

 

posted @ 2014-11-05 15:37  林六天  阅读(309)  评论(0编辑  收藏  举报