Java IO流

自己整理的笔记,以后留着看。


1.创建文件


        /**
	 * 创建文件
	 *     注意:创建文件之前判断文件是否存在,不然原来的文件要被覆盖。
	 */
	public static void createFileDemo(){
		File file = new File(filepath);
		if(!file.exists()){
			try {
				file.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}


2. File类中的常量


  File.pathSeparator指的是分隔连续多个路径字符串的分隔符,例如:
  java   -cp   test.jar;abc.jar   HelloWorld
  就是指“;”
  File.separator才是用来分隔同一个路径字符串中的目录的,例如:
  C:\Program Files\Common Files
  就是指“\”


3.用字节流的方式写入文件

        /**
	 * 用字节流的方式写入文件
	 *     文件输出流的创建方式有两种,File对象或者文件绝对路径。
	 */
	public static void writeFileByStreamDemo(){
		
		try {
			FileOutputStream out = new FileOutputStream(filepath);
			//另一种方式
			//FileOutputStream out = new FileOutputStream(new File(filepath));
			String str="你好";
			out.write(str.getBytes());
			out.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}


字节流貌似是没有缓冲的,在不调用out.close();的情况下,依然可以向文件中写入数据。字符流有缓冲。


4.FileOutputStream追加文件


        /**
	 * 用FileOutputStream追加文件
	 *      创建文件输出流时指定第二个参数为true则为追加。new FileOutputStream(filepath,true);
	 */
	public static void appendFileByStreamDemo(){
		
		try {
			FileOutputStream out = new FileOutputStream(filepath,true);
			String str="娅娅";
			out.write(str.getBytes());
			out.close();
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}



5.按流读取文件


        /**
	 * 按流读取,当文件内容较少时,可以将其一次读取到字符数组里面
	 */
	public static void readFileByStreamDemo1(){
		
		try {
			File file = new File(filepath);
			FileInputStream  in = new FileInputStream(file);
			byte[] b = new byte[(int) file.length()];
			in.read(b);
			System.out.println(new String(b));
			in.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}


byte[] b = new byte[(int) file.length()]; 定义和文件内容字节长度一样的字节数组,可以一次写入到数组,如果定义数组长度较长,会导致最后多输出空格。


6.按流循环读取,判断是否到达文件末尾


        /**
	 * 按流循环读取,判断是否到达文件末尾
	 */
	public static void readFileByStream2(){
		try {
			File file = new File(filepath);
			FileInputStream  in = new FileInputStream(file);
			byte[] b = new byte[1024];
			int len = 0;
			while((len = in.read(b))!=-1){
				System.out.println(new String(b,0,len));
			}
			in.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

FileInputStream  

判断是否读取到文件末尾的条件  

(len = in.read(b))!=-1



7.字符输出流写入文件

        /**
	 * 字符输出流写入文件
	 */
	public static void writeFileByChar(){
		
		try {
			FileWriter fw = new FileWriter(filepath);
			fw.write(new char[]{'中','国'});
			fw.write(1);
			fw.write("成功");
            fw.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

fw.write(-1); 这里我如果写入-1似乎不能成功,求解?

8.字符输入流读取文件  FileReader 


        /**
	 * 按字符一次性读取
	 */
	public static void readFileByCharDemo1(){
		
		try {
			FileReader fr = new FileReader(filepath);
			char[] c = new char[100];
			int len = fr.read(c);
			System.out.println("length:"+len);
			System.out.println(new String(c,0,len));
		    fr.close();
		
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}



9. FileReader循环读取,判断读取到文件末尾


        /**
	 * 循环读取,判断读取到文件末尾
	 */
    public static void readFileByChar2(){
		
		try {
			FileReader fr = new FileReader(filepath);
			char[] c = new char[1024];
			int len=0;
			while((len= fr.read(c))!=-1){
				System.out.println(new String(c,0,len));
			}
		    fr.close();
		
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

10.复制文件


   /**
     * 复制文件
     * @param path1
     * @param path2
     */
    public static void copyFile(String path1,String path2){
    	
    	try {
			FileInputStream in = new FileInputStream(path1);
			FileOutputStream out = new FileOutputStream(path2);
			
			byte[] b = new byte[1024];
			int len = 0;
			while((len=in.read(b))!=-1){
				out.write(b, 0, len);
			}
			in.close();
			out.close();
		} catch (IOException e) {
		}
    }


11. OutputStreramWriter 和 InputStreamReader


    OutputStreramWriter 和InputStreamReader类

    整个IO类中除了字节流和字符流还包括字节和字符转换流。

    OutputStreramWriter将输出的字符流转化为字节流

    InputStreamReader将输入的字节流转换为字符流

 public static void  OutputStreramWriterDemo1(){
    	
    	try {
			Writer writer = new OutputStreamWriter(new FileOutputStream(copypath));
			writer.write("hello");
			writer.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
    	
    }

 public static void InputStreamReaderDemo1(){
    	
    	try {
			Reader reader = new java.io.InputStreamReader(new FileInputStream(filepath));
			char[] c = new char[100];
			int len = 0;
			len = reader.read(c);
			System.out.println(new String(c,0,len));
			reader.close();
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
    }

12.打印流 PrintStream

   public static void printStreamDemo1(){
    	
    	try {
			PrintStream print = new PrintStream(new FileOutputStream(filepath));
			print.print(true);
			print.print("yaya");
			String name="Rollen";
		    Integer age = 20;
            // 格式化输出
		    print.printf("姓名:%s. 年龄:%d.", new Object[]{name,age});
		    print.close();
			print.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
    }

13.  PrintStream  
输入输出重定向

 // 输入输出重定向
    public static void PrintStreamDemo2(){
    	// 此刻直接输出到控制台
        System.out.println("hello");
        File file = new File(filepath);
        try{
            System.setOut(new PrintStream(new FileOutputStream(file)));
        }catch(FileNotFoundException e){
            e.printStackTrace();
        }
        System.out.println("这些内容在文件中才能看到哦!");
    }

  // 使用OutputStream向控制台输出内容
    public static void OutputStreamDemo(){
    	
    	try {
			OutputStream out = System.out;
			out.write("输出到控制台".getBytes());
			out.close();
		} catch (Exception e) {
		}
    }



14 BufferedReader


   // bufferedReader 只接受字符输入流。
    public static void BufferedReader1(){
    	
    	// System.in 流转换成 字符输入流 InputStreamReader
    	BufferedReader br = new BufferedReader(
    	  new InputStreamReader(System.in)
    	);
    	
    	System.out.println("请输入内容:");
    	try {
			String str = br.readLine();
			System.out.println("你输入的内容是:"+str);
		} catch (IOException e) {
			e.printStackTrace();
		}

    }




15 Scanner 

    // 采用Scanner类来进行数据输入,
    public  static void ScannerDemo(){
    	
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入内容:");
        String str = scanner.nextLine();
        System.out.println("你输入的内容是:"+str);
    }

   // Scanner 从文件中读取内容
    // Scanner可以接受任何的输入流
    public static void Scanner2(){
    	
    	File file = new File(filepath);
    	try {
			Scanner scanner = new Scanner(file);
			String str = scanner.next();
			System.out.println("文件中的内容为:"+str);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
    	
    }


16 数据操作流DataOutputStream、DataInputStream类



  //数据操作流DataOutputStream、DataInputStream类
    
    public static void DataOutputStreamDemo(){
    	
    	File file = new File(filepath);
    	char[] ch = {'A','B','C'};
    	try {
			DataOutputStream ds = new DataOutputStream(new FileOutputStream(file));
			for (char c : ch) {
				ds.writeChar(c);
			}
			ds.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
    }
    
    public static void DataInputStreamDemo(){
    	
    	File file = new File(filepath);
    	try {
			DataInputStream ds = new DataInputStream(new FileInputStream(file));
			char[] ch = new char[3];
			char c;
			int len =0;
			while((c=ds.readChar())!='C'){
				ch[len] = c;
				len++;
			}
			System.out.println(ch);
			ds.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
    }


 //DataInputStream.available()==0  判断到达文件末尾

17.合并流 SequenceInputStream



// 合并流 SequenceInputStreamDemo
    public static void SequenceInputStreamDemo(){
    	
    	File file1 = new File("d:" + File.separator + "hello1.txt");
        File file2 = new File("d:" + File.separator + "hello2.txt");
        File file3 = new File("d:" + File.separator + "hello.txt");
        try {
			InputStream input1 = new FileInputStream(file1);
			InputStream input2 = new FileInputStream(file2);
			OutputStream output = new FileOutputStream(file3);
			// 合并流
			SequenceInputStream sis = new SequenceInputStream(input1, input2);
			int temp = 0;
			while ((temp = sis.read()) != -1) {
				output.write(temp);
			}
			input1.close();
			input2.close();
			output.close();
			sis.close();
		} catch (Exception e) {
		}
    }

18 ZipOutputStream


 //单个文件压缩 ZipOutputStream类
    
    public static void ZipOutputStreamDemo(){
    	
    	File file = new File(filepath);
        File zipFile = new File(zipfilepath);
        try {
			InputStream input = new FileInputStream(file);
			ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(
					zipFile));
			zipOut.putNextEntry(new ZipEntry(file.getName()));
			// 设置注释
			zipOut.setComment("hello");
			int temp = 0;
			while ((temp = input.read()) != -1) {
				zipOut.write(temp);
			}
			input.close();
			zipOut.close();
		} catch (Exception e) {
		}
    }

19 多个文件压缩

  // 多个文件压缩
    public static void ZipOutputStreamDemo2(){
    	
    	// 要被压缩的文件夹
        File file = new File(zipfolderpath);
        File zipFile = new File("c:" + File.separator + "zipFile.zip");
        InputStream input = null;
        try {
			ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(
					zipFile));
			zipOut.setComment("hello");
			if (file.isDirectory()) {
				File[] files = file.listFiles();
				for (int i = 0; i < files.length; ++i) {
					input = new FileInputStream(files[i]);
					zipOut.putNextEntry(new ZipEntry(file.getName()
							+ File.separator + files[i].getName()));
					int temp = 0;
					while ((temp = input.read()) != -1) {
						zipOut.write(temp);
					}
					input.close();
				}
			}
			zipOut.close();
		} catch (Exception e) {
		}
    }

20  单个文件解压

 // 单个文件解压
    public static void ZipFileDemo(){
    	
    	 File file = new File("d:" + File.separator + "hello.zip");
         File outFile = new File("d:" + File.separator + "unZipFile.txt");
         try {
			ZipFile zipFile = new ZipFile(file);
			ZipEntry entry = zipFile.getEntry("hello.txt");
			InputStream input = zipFile.getInputStream(entry);
			OutputStream output = new FileOutputStream(outFile);
			int temp = 0;
			while ((temp = input.read()) != -1) {
				output.write(temp);
			}
			input.close();
			output.close();
		} catch (Exception e) {
		}
    }
    

21.多个文件解压


 
 // 多个文件解压,当我们需要解压缩多个文件的时候,ZipEntry就无法使用了,
    //如果想操作更加复杂的压缩文件,我们就必须使用ZipInputStream类
    public static void ZipFileDemo2(){
    	
    	File file = new File("d:" + File.separator + "zipFile.zip");
        File outFile = null;
        try {
			ZipFile zipFile = new ZipFile(file);
			ZipInputStream zipInput = new ZipInputStream(new FileInputStream(
					file));
			ZipEntry entry = null;
			InputStream input = null;
			OutputStream output = null;
			while ((entry = zipInput.getNextEntry()) != null) {
				System.out.println("解压缩" + entry.getName() + "文件");
				outFile = new File("d:" + File.separator + entry.getName());
				if (!outFile.getParentFile().exists()) {
					outFile.getParentFile().mkdir();
				}
				if (!outFile.exists()) {
					outFile.createNewFile();
				}
				input = zipFile.getInputStream(entry);
				output = new FileOutputStream(outFile);
				int temp = 0;
				while ((temp = input.read()) != -1) {
					output.write(temp);
				}
				input.close();
				output.close();
			}
		} catch (Exception e) {
		}
    }











  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值