JavaIO流

IO

文件--基本概念

文件是数据源(保存数据的地方)的一种,比如大word文档、jpg文件、MP4文件...都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保存视频、声音...等

 

文件流--基本概念

文件在程序中是以流的形式来操作的。

JavaIO流_第1张图片

流:数据在数据源(文件)和程序(内存)之间经历的路径

输入流:数据从数据源(文件)到程序(内存)的路径

输出流:数据从程序(内存)到数据源(文件)的路径


如何判断是输入流、输出流?

以内存为参照,如果数据流向内存流动,则是输入流;反之,则是输出流。


文件流--分类

JavaIO流_第2张图片


java流分为两种流

1、字节流:可以用于读写二进制文件及任何类型文件

2、字符流:可以用于读写文本文件,不能操作二进制文件


实例1.File类的使用

/**
 * File类的基本用法
 */
package com.io;

import java.io.*;

public class IO1 {
	public static void main(String[] args) {
		//创建一个文件对象
		File f1 = new File("C:\\in.txt");
		
		//得到文件路径
		System.out.println("文件路径:" + f1.getAbsolutePath());
		
		//得到文件的大小,字节数
		System.out.println("文件大小:" + f1.length());
		
		//是否可读
		System.out.println("可读" + f1.canRead());
		
		//创建文件和创建文件夹
		File f2 = new File("C:\\in2.txt");
		//判断文件是否存在
		if(!f2.exists()){
			//创建一个文件
			try {
				f2.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
			System.out.println("文件创建成功");
		} else {
			System.out.println("文件已存在,无法创建");
		}
		
		File f3 = new File("C:\\file1");
		//判断文件是否为文件夹
		if(f3.isDirectory()){
			System.out.println("文件夹已存在");
		} else {
			//创建文件夹
			f3.mkdir();
			System.out.println("文件夹已创建");
		}
		
		//列出一个文件夹下面的所有文件
		File f4 = new File("C:\\");
		
		if(f4.isDirectory()){
			//获取文件数组
			File[] lists = f4.listFiles();
			for(int i = 0; i < lists.length; i++){
				System.out.println("文件名:" + lists[i].getName());
			}
			
		}
		
		
	}

}


实例2.文件字节流的使用

/**
 * FileInputStream类的使用
 */
package com.io;
import java.io.*;
public class IO2 {

	
	public static void main(String[] args) {
		//创建一个文件对象
		File f = new File("C:\\in.txt");
		FileInputStream fis = null;
		//File无读写能力,所以需要使用InputStream进行读入
		try {
			fis = new FileInputStream(f);
			
			//定义一个字节数组,相当于缓存
			byte[] bytes = new byte[1024];
			//得到实际读取到的字节数
			int n = 0;
			//循环读取
			while((n = fis.read(bytes)) != -1){
				//把字节转换成String
				String s = new String(bytes, 0, n);
				System.out.println(s);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			//关闭文件流--必须放这里
			try {
				fis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}


/**
 * FileOutputStream类的使用
 */
package com.io;
import java.io.*;
public class IO3 {
	public static void main(String[] args) {
		//创建文件对象
		File f = new File("C:\\out2.txt");
		
		//字节输出流
		FileOutputStream fos = null;
		
		try {
			fos = new FileOutputStream(f);
			String s = "hello,world\r\n";
			String s2 = "hello,java\r\n";
			//定义字节数组
			//byte[] bytes = new byte[1024];
			
			fos.write(s.getBytes());
			fos.write(s2.getBytes());
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				fos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

}

/**
 * 图片拷贝
 */
package com.io;
import java.io.*;
public class IO4 {
	public static void main(String[] args) {
		//先把图片读入到内存 -> 写入到某个文件
		//因为是二进制文件,因此只能用字节流完成
		
		//输入流
		FileInputStream fis = null;
		//输出流
		FileOutputStream fos = null;
		 try {
			fis = new FileInputStream(new File("C:\\image01.jpg"));
			fos = new FileOutputStream(new File("C:\\image01_copy.jpg"));
			
			byte[] buf = new byte[1024];
			//记录实际读取到的字节
			int n = 0;
			//循环读取
			while((n = fis.read(buf)) != -1){
				//输出到指定文件
				fos.write(buf);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			//关闭打开的文件流
			try {
				fis.close();
				fos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

}


实例3.文件字节流

/**
 * 字符流
 */
package com.io;
import java.io.*;
public class IO5 {
	public static void main(String[] args) {
		//文件读入字符流
		FileReader fr = null;
		//文件写出字符流
		FileWriter fw = null;
		
		try {
			//创建文件读入字符流对象
			fr = new FileReader(new File("C:\\test.txt"));
			//创建文件写出字符流对象
			fw = new FileWriter(new File("C:\\test_copy.txt"));
			
			//读入到内存
			//缓存char数组
			char[] c = new char[1024];
			//读入实际大小
			int n = 0;
			while((n = fr.read(c)) != -1){
				fw.write(c, 0, n);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			//关闭文件流
			try {
				fr.close();
				fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}


实例4.缓存字节流

/**
 * 缓冲字符流
 * 
 */
package com.io;
import java.io.*;
public class IO6 {

	
	public static void main(String[] args) {
		//缓冲字符流定义
		BufferedReader br = null;
		BufferedWriter bw = null;
		
		try {
			//创建FileReader对象
			FileReader fr = new FileReader(new File("C:\\test.txt"));
			//创建FileWriter对象
			FileWriter fw = new FileWriter(new File("C:\\test_copy2.txt"));
			
			//创建缓冲字符流
			br = new BufferedReader(fr);
			bw = new BufferedWriter(fw);
			
			
			//循环读文件
			//临时字符串
			String s = "";
			while((s = br.readLine()) != null){
				//输出到文件
				bw.write(s + "\r\n");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			
			//关闭缓冲字符流
			try {
				br.close();
				bw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		

	}

}


实例5.记事本

/**
 * 记事本(界面+功能)
 */
package com.notepad;

import java.io.*;
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class NotePad extends JFrame implements ActionListener{
	//定义组件
	//文本域
	JTextArea jta = null;
	//滚动条
	JScrollPane jsp = null;
	//菜单条
	JMenuBar jmb =null;
	//菜单栏目
	JMenu jm = null;
	//菜单项
	JMenuItem jmi1 = null;
	JMenuItem jmi2 = null;
	
	//构造方法
	public NotePad(){
		//创建组件
		jta = new JTextArea();
		jsp = new JScrollPane(jta);
		jmb = new JMenuBar();
		jm = new JMenu("文件(F)");
		jmi1 = new JMenuItem("打开(O)");
		jmi2 = new JMenuItem("保存(S)");
		
		//设置助记符
		jm.setMnemonic('F');
		jmi1.setMnemonic('O');
		jmi2.setMnemonic('S');
		
		//设置监听器
		jmi1.addActionListener(this);
		jmi2.addActionListener(this);
		
		//设置动作监听器反应命令
		jmi1.setActionCommand("open");
		jmi2.setActionCommand("save");
		
		//设置菜单条
		setJMenuBar(jmb);
		
		//把菜单栏目放入菜单条
		jmb.add(jm);
		
		//菜单项放入菜单栏
		jm.add(jmi1);
		jm.add(jmi2);
		
		
		//加入到JFrame
		add(jsp);
		
		
		//设置窗体
		setTitle("我的记事本");
		setSize(400,300);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}
	
	
	public static void main(String[] args) {
		NotePad np = new NotePad();

	}

	//动作监听器实现
	@Override
	public void actionPerformed(ActionEvent e) {
		
		if(e.getActionCommand().equals("open")){
			//文件选择框
			JFileChooser jfc = new JFileChooser();
			jfc.setDialogTitle("打开文件");
			jfc.showOpenDialog(null);
			jfc.setVisible(true);
			String file = jfc.getSelectedFile().getAbsolutePath();
			//设置缓冲读入流
			BufferedReader br = null;
			try {
				br = new BufferedReader(new FileReader(new File(file)));
				//临时字符串
				String s = "";
				String all = "";
				while((s = br.readLine()) != null){
					//因为readLine方法会去掉回车换行
					all += s + "\r\n";
				}
				jta.setText(all);
			} catch (Exception e2) {
				e2.printStackTrace();
			} finally {
				try {
					br.close();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
			
		} else if(e.getActionCommand().equals("save")){
			//文件选择框
			JFileChooser jfc = new JFileChooser();
			jfc.setDialogTitle("保存文件");
			jfc.showSaveDialog(null);
			jfc.setVisible(true);
			
			String file = jfc.getSelectedFile().getAbsolutePath();
			//设置缓冲写出流
			BufferedWriter bw = null;
			try {
				bw = new BufferedWriter(new FileWriter(new File(file)));
				//临时存放JTextArea中的字符串
				String s = jta.getText();
				//将字符串按一行分割成字符串数组
				String[] ss = s.split("\r\n");
				//循环写入写出流
				for(int i = 0; i < ss.length; i++){
					bw.write(ss[i] + "\r\n");
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			} finally {
				try {
					bw.close();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
			
		} else {
			System.out.println("无效动作");
		}
		
	}

}


----------参考《韩顺平.循序渐进学.java.从入门到精通》

----------参考《JDK_API_1_6_zh_CN

Java学习笔记--导航http://blog.csdn.net/q547550831/article/details/49819641


你可能感兴趣的:(java,基础,IO流,基本用法)