JAVA基础day15

package com.atguigu.java;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import org.junit.Test;

/*

  • 抽象基类 节点流(文件流) 缓冲流(处理流的一种,可以提升文件操作的效率)

  • InputStream FileInputStream BufferedInputStream

  • OutputStream FileOutputStream BufferedOutputStream (flush())

  • Reader FileReader BufferedReader (readLine())

  • Writer FileWriter BufferedWriter (flush())
    */
    public class TestBuffered {
    @Test
    public void testBufferedReader(){
    BufferedReader br = null;
    BufferedWriter bw = null;
    try {
    File file = new File(“dbcp.txt”);
    File file1 = new File(“dbcp3.txt”);
    FileReader fr = new FileReader(file);

     	FileWriter fw = new FileWriter(file1);
     	br = new BufferedReader(fr);
     	bw = new BufferedWriter(fw);
    

// char[] c = new char[1024];
// int len;
// while((len = br.read©)!= -1){
// String str = new String(c, 0, len);
// System.out.print(str);
// }

		String str;
		while((str = br.readLine()) != null){

// System.out.println(str);
bw.write(str + “\n”);
// bw.newLine();
bw.flush();
}
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(bw != null){
try {
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

		}
		if(br != null){
			try {
				br.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		
	}
}

@Test
public void testCopyFile(){
	long start = System.currentTimeMillis();

// String src = “C:\Users\shkstart\Desktop\1.avi”;
// String dest = “C:\Users\shkstart\Desktop\3.avi”;
String src = “C:\Users\shkstart\Desktop\实验.doc”;
String dest = “C:\Users\shkstart\Desktop\实验1.doc”;
copyFile(src,dest);
long end = System.currentTimeMillis();
System.out.println(“花费的时间为:” + (end - start));//746
}

//使用缓冲流实现文件的复制的方法
public void copyFile(String src,String dest){
	BufferedInputStream bis = null;
	BufferedOutputStream bos = null;
	try {
		//1.提供读入、写出的文件
		File file1 = new File(src);
		File file2 = new File(dest);
		//2.想创建相应的节点流:FileInputStream、FileOutputStream
		FileInputStream fis = new FileInputStream(file1);
		FileOutputStream fos = new FileOutputStream(file2);
		//3.将创建的节点流的对象作为形参传递给缓冲流的构造器中
		bis = new BufferedInputStream(fis);
		bos = new BufferedOutputStream(fos);
		//4.具体的实现文件复制的操作
		byte[] b = new byte[1024];
		int len;
		while((len = bis.read(b)) != -1){
			bos.write(b, 0, len);
			bos.flush();
		}
	}catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally{
		//5.关闭相应的流
		if(bos != null){
			try {
				bos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		if(bis != null){
			try {
				bis.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		
	}
}


//使用BufferedInputStream和BufferedOutputStream实现非文本文件的复制
@Test
public void testBufferedInputOutputStream(){
	BufferedInputStream bis = null;
	BufferedOutputStream bos = null;
	try {
		//1.提供读入、写出的文件
		File file1 = new File("1.jpg");
		File file2 = new File("2.jpg");
		//2.想创建相应的节点流:FileInputStream、FileOutputStream
		FileInputStream fis = new FileInputStream(file1);
		FileOutputStream fos = new FileOutputStream(file2);
		//3.将创建的节点流的对象作为形参传递给缓冲流的构造器中
		bis = new BufferedInputStream(fis);
		bos = new BufferedOutputStream(fos);
		//4.具体的实现文件复制的操作
		byte[] b = new byte[1024];
		int len;
		while((len = bis.read(b)) != -1){
			bos.write(b, 0, len);
			bos.flush();
		}
	}catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally{
		//5.关闭相应的流
		if(bos != null){
			try {
				bos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		if(bis != null){
			try {
				bis.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		
	}
}

}

package com.atguigu.java;

import java.io.File;
import java.io.IOException;
import java.util.Date;

import org.junit.Test;

/*

  • java.io.File类

  • 1.凡是与输入、输出相关的类、接口等都定义在java.io包下

  • 2.File是一个类,可以有构造器创建其对象。此对象对应着一个文件(.txt .avi .doc .ppt .mp3 .jpg)或文件目录

  • 3.File类对象是与平台无关的。

  • 4.File中的方法,仅涉及到如何创建、删除、重命名等等。只要涉及文件内容的,File是无能为力的,必须由io流来完成。

  • 5.File类的对象常作为io流的具体类的构造器的形参。
    /
    public class TestFile {
    /

    • createNewFile()
      delete()
      mkDir():创建一个文件目录。只有在上层文件目录存在的情况下,才能返回true
      mkDirs():创建一个文件目录。若上层文件目录不存在,一并创建
      list()
      listFiles()
      */
      @Test
      public void test3() throws IOException{
      File file1 = new File(“d:/io/helloworld.txt”);
      System.out.println(file1.delete());

      if(!file1.exists()){
      boolean b = file1.createNewFile();
      System.out.println(b);
      }

      File file2 = new File(“d:\io1\io2”);
      if(!file2.exists()){
      boolean b = file2.mkdirs();
      System.out.println(b);
      }

      File file3 = new File(“d:\teach”);
      String[] strs = file3.list();
      for(int i = 0;i < strs.length;i++){
      System.out.println(strs[i]);
      }

      System.out.println();

      File[] files = file3.listFiles();
      for(int i = 0;i < files.length;i++){
      System.out.println(files[i].getName());
      }
      }

    /*

    • exists()
      canWrite()
      canRead()
      isFile()
      isDirectory()
      lastModified()
      length()

    */
    @Test
    public void test2(){
    File file1 = new File(“d:/io/helloworld.txt”);
    File file2 = new File(“d:\io\io1”);

     System.out.println(file1.exists());
     System.out.println(file1.canWrite());
     System.out.println(file1.canRead());
     System.out.println(file1.isFile());
     System.out.println(file1.isDirectory());
     System.out.println(new Date(file1.lastModified()));
     System.out.println(file1.length());
     
     System.out.println();
     
     System.out.println(file2.exists());
     System.out.println(file2.canWrite());
     System.out.println(file2.canRead());
     System.out.println(file2.isFile());
     System.out.println(file2.isDirectory());
     System.out.println(new Date(file2.lastModified()));
     System.out.println(file2.length());
    

    }

    /*

    • 路径:
    • 绝对路径:包括盘符在内的完整的文件路径
    • 相对路径:在当前文件目录下的文件的路径
    • getName()
      getPath()
      getAbsoluteFile()
      getAbsolutePath()
      getParent()
      renameTo(File newName)

    */
    @Test
    public void test1(){
    File file1 = new File(“d:/io/helloworld.txt”);
    File file2 = new File(“hello1.txt”);

     File file3 = new File("d:\\io\\io1");
     File file4 = new File("d:\\io2");
     
     System.out.println(file1.getName());
     System.out.println(file1.getPath());
     System.out.println(file1.getAbsoluteFile());
     System.out.println(file1.getParent());
     System.out.println(file1.getAbsolutePath());
     
     System.out.println();
     
     System.out.println(file3.getName());
     System.out.println(file3.getPath());
     System.out.println(file3.getAbsoluteFile());
     System.out.println(file3.getParent());
     System.out.println(file3.getAbsolutePath());
     
     //renameTo(File newName):重命名
     //file1.renameTo(file2):file1重命名为file2.要求:file1文件一定存在,file2一定不存在
     boolean b = file1.renameTo(file2);
     System.out.println(b);
     
     boolean b1 = file4.renameTo(file3);
     System.out.println(b1);
    

    }
    }

package com.atguigu.java;

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

import org.junit.Test;

/*

  • 1.流的分类:

  • 按照数据流向的不同:输入流 输出流

  • 按照处理数据的单位的不同:字节流 字符流(处理的文本文件)

  • 按照角色的不同:节点流(直接作用于文件的) 处理流

  • 2.IO的体系

  • 抽象基类 节点流(文件流) 缓冲流(处理流的一种)

  • InputStream FileInputStream BufferedInputStream

  • OutputStream FileOutputStream BufferedOutputStream

  • Reader FileReader BufferedReader

  • Writer FileWriter BufferedWriter
    */
    public class TestFileInputOutputStream {
    @Test
    public void testCopyFile(){
    long start = System.currentTimeMillis();
    // String src = “C:\Users\shkstart\Desktop\1.avi”;
    // String dest = “C:\Users\shkstart\Desktop\2.avi”;
    String src = “dbcp.txt”;
    String dest = “dbcp2.txt”;
    copyFile(src,dest);
    long end = System.currentTimeMillis();
    System.out.println(“花费的时间为:” + (end - start));//3198
    }

    // 实现文件复制的方法
    public void copyFile(String src, String dest) {
    // 1.提供读入、写出的文件
    File file1 = new File(src);
    File file2 = new File(dest);
    // 2.提供相应的流
    FileInputStream fis = null;
    FileOutputStream fos = null;
    try {
    fis = new FileInputStream(file1);
    fos = new FileOutputStream(file2);
    // 3.实现文件的复制
    byte[] b = new byte[1024];
    int len;
    while ((len = fis.read(b)) != -1) {
    // fos.write(b);//错误的写法两种: fos.write(b,0,b.length);
    fos.write(b, 0, len);
    }
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    if (fos != null) {
    try {
    fos.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    if (fis != null) {
    try {
    fis.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

     }
    

    }

    // 从硬盘读取一个文件,并写入到另一个位置。(相当于文件的复制)
    @Test
    public void testFileInputOutputStream() {
    // 1.提供读入、写出的文件
    File file1 = new File(“C:\Users\shkstart\Desktop\1.jpg”);
    File file2 = new File(“C:\Users\shkstart\Desktop\2.jpg”);
    // 2.提供相应的流
    FileInputStream fis = null;
    FileOutputStream fos = null;
    try {
    fis = new FileInputStream(file1);
    fos = new FileOutputStream(file2);
    // 3.实现文件的复制
    byte[] b = new byte[20];
    int len;
    while ((len = fis.read(b)) != -1) {
    // fos.write(b);//错误的写法两种: fos.write(b,0,b.length);
    fos.write(b, 0, len);
    }
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    if (fos != null) {
    try {
    fos.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    if (fis != null) {
    try {
    fis.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

     }
    

    }

    // FileOutputStream
    @Test
    public void testFileOutputStream() {
    // 1.创建一个File对象,表明要写入的文件位置。
    // 输出的物理文件可以不存在,当执行过程中,若不存在,会自动的创建。若存在,会将原有的文件覆盖
    File file = new File(“hello2.txt”);
    // 2.创建一个FileOutputStream的对象,将file的对象作为形参传递给FileOutputStream的构造器中
    FileOutputStream fos = null;
    try {
    fos = new FileOutputStream(file);
    // 3.写入的操作
    fos.write(new String(“I love China!”).getBytes());
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    // 4.关闭输出流
    if (fos != null) {
    try {
    fos.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    }

    @Test
    public void testFileInputStream3() { // abcdefgcde
    FileInputStream fis = null;
    try {
    File file = new File(“hello.txt”);
    fis = new FileInputStream(file);
    byte[] b = new byte[5];// 读取到的数据要写入的数组。
    int len;// 每次读入到byte中的字节的长度
    while ((len = fis.read(b)) != -1) {
    // for (int i = 0; i < len; i++) {
    // System.out.print((char) b[i]);
    // }
    String str = new String(b, 0, len);
    System.out.print(str);
    }
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    if (fis != null) {
    try {
    fis.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

     	}
    
     }
    

    }

    // 使用try-catch的方式处理如下的异常更合理:保证流的关闭操作一定可以执行
    @Test
    public void testFileInputStream2() {
    // 2.创建一个FileInputStream类的对象
    FileInputStream fis = null;
    try {
    // 1.创建一个File类的对象。
    File file = new File(“hello.txt”);
    fis = new FileInputStream(file);
    // 3.调用FileInputStream的方法,实现file文件的读取。
    int b;
    while ((b = fis.read()) != -1) {
    System.out.print((char) b);
    }
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    // 4.关闭相应的流
    if (fis != null) {
    try {
    fis.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    }

    // 从硬盘存在的一个文件中,读取其内容到程序中。使用FileInputStream
    // 要读取的文件一定要存在。否则抛FileNotFoundException
    @Test
    public void testFileInputStream1() throws Exception {
    // 1.创建一个File类的对象。
    File file = new File(“hello.txt”);
    // 2.创建一个FileInputStream类的对象
    FileInputStream fis = new FileInputStream(file);
    // 3.调用FileInputStream的方法,实现file文件的读取。
    /*
    * read():读取文件的一个字节。当执行到文件结尾时,返回-1
    */
    // int b = fis.read();
    // while(b != -1){
    // System.out.print((char)b);
    // b = fis.read();
    // }
    int b;
    while ((b = fis.read()) != -1) {
    System.out.print((char) b);
    }
    // 4.关闭相应的流
    fis.close();
    }
    }

package com.atguigu.java;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import org.junit.Test;

/*

  • 使用FileReader、FileWriter 可以实现文本文件的复制。

  • 对于非文本文件(视频文件、音频文件、图片),只能使用字节流!
    */
    public class TestFileReaderWriter {
    @Test
    public void testFileReaderWriter(){
    //1.输入流对应的文件src一定要存在,否则抛异常。输出流对应的文件dest可以不存在,执行过程中会自动创建
    FileReader fr = null;
    FileWriter fw = null;
    try{
    //不能实现非文本文件的复制
    // File src = new File(“C:\Users\shkstart\Desktop\1.jpg”);
    // File dest = new File(“C:\Users\shkstart\Desktop\3.jpg”);
    File src = new File(“dbcp.txt”);
    File dest = new File(“dbcp1.txt”);
    //2.
    fr = new FileReader(src);
    fw = new FileWriter(dest);
    //3.
    char[] c = new char[24];
    int len;
    while((len = fr.read©) != -1){
    fw.write(c, 0, len);
    }
    }catch(Exception e){
    e.printStackTrace();
    }finally{
    if(fw != null){
    try {
    fw.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    if(fr != null){
    try {
    fr.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    }

    @Test
    public void testFileReader(){
    FileReader fr = null;
    try {
    File file = new File(“dbcp.txt”);
    fr = new FileReader(file);
    char[] c = new char[24];
    int len;
    while((len = fr.read©) != -1){
    String str = new String(c, 0, len);
    System.out.print(str);
    }
    }catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }finally{
    if(fr != null){
    try {
    fr.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }

    }
    }

package com.atguigu.java;

import java.io.BufferedReader;
import java.io.BufferedWriter;
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.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

import org.junit.Test;

public class TestOtherStream {
/*
* 标准的输入输出流:
* 标准的输出流:System.out
* 标准的输入流:System.in
*
* 题目:
* 从键盘输入字符串,要求将读取到的整行字符串转成大写输出。然后继续进行输入操作,
* 直至当输入“e”或者“exit”时,退出程序。

 */
@Test
public void test2(){
	BufferedReader br = null;
	try {
		InputStream is = System.in;
		InputStreamReader isr = new InputStreamReader(is);
		br = new BufferedReader(isr);
		String str;
		while(true){
			System.out.println("请输入字符串:");
			str = br.readLine();
			if(str.equalsIgnoreCase("e") || str.equalsIgnoreCase("exit")){
				break;
			}
			String str1 = str.toUpperCase();
			System.out.println(str1);
		}
	} catch (IOException e) {
		e.printStackTrace();
	}finally{
		if(br != null){
			try {
				br.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}
}

/*
 * 如何实现字节流与字符流之间的转换:
 * 转换流:InputStreamReader  OutputStreamWriter
 * 编码:字符串  --->字节数组
 * 解码:字节数组--->字符串
 */
@Test
public void test1(){
	BufferedReader br = null;
	BufferedWriter bw = null;
	try {
		//解码
		File file = new File("dbcp.txt");
		FileInputStream fis = new FileInputStream(file);
		InputStreamReader isr = new InputStreamReader(fis, "GBK");
		br = new BufferedReader(isr);
		//编码
		File file1 = new File("dbcp4.txt");
		FileOutputStream fos = new FileOutputStream(file1);
		OutputStreamWriter osw = new OutputStreamWriter(fos, "GBK");
		bw = new BufferedWriter(osw);
		String str;
		while((str = br.readLine()) != null){
			bw.write(str);
			bw.newLine();
			bw.flush();
		}
	}catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally{
		if(bw != null){
			try {
				bw.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		if(br != null){
			try {
				br.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}
	
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值