I/O输入和输出详解

I/O输入和输出

文件的输入和输出是java中很重要的内容,主要是通过数据流来进行,数据流通过获取文件对象,然后对文件进行输入和输出。

1、IO.File测试

public class FileTest {
	public static void main(String[] args) {
		new FileTest().createFile();
		new FileTest().getMessage();
		new FileTest().outputStream();
		new FileTest().inputStream();
	}
	
	public void createFile(){
		//创建文件对象
		File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\word1.txt");
		//判断是否存在该文件名的文件
		if (file.exists()) {
			//删除该文件名的文件
			file.delete();
			System.out.println("文件已经删除");
			//如果不存在就直接创建文件
		}else {
			try{
				//创建文件
				file.createNewFile();
				System.out.println("文件已经创建");
			}catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	//获取某个文件的相关信息
	public void getMessage(){
		File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\word1.txt");
		if (file.exists()) {
			//获取文件名字
			String  name=file.getName();
			//获取文件长度
			long length=file.length();
			//文件是否隐藏的
			boolean hidden=file.isHidden();
			//文件是否可读
			boolean read=file.canRead();
			//文件是否可写
			boolean writer=file.canWrite();
			//获取文件绝对路径
			String absolutePath=file.getAbsolutePath();
			//获取文件父路径
			String parent=file.getParent();
			//判断该路径文件是否是文件类型
			boolean isfile=file.isFile();
			//判断路径文件是否为目录
			boolean isdirectory=file.isDirectory();
			//获取文件最后一次修改时间
			long lasttime=file.lastModified();
			//转换一下时间格式
			java.util.Date date=new java.util.Date(lasttime);
			System.out.println("文件名称是:"+name);
			System.out.println("文件长度是:"+length);
			System.out.println("该文件是隐藏文件吗?"+hidden);
			System.out.println("该文件是可读文件吗?"+read);
			System.out.println("该文件是可写文件吗?"+writer);
			System.out.println("文件的绝对路径是:"+absolutePath);
			System.out.println("文件的父路径是:"+parent);
			System.out.println("该文件是一个文件吗?"+isfile);
			System.out.println("该文件是一个目录吗?"+isdirectory);
			System.out.println("该文件最后修改时间为:"+date);
		}else {
			System.out.println("文件不存在");
		}
	}
	//获取输出流
	public void outputStream(){
		//创建输出文件对象
		File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\word1.txt");
		try {
			//将文件对象加入到输出流中
			FileOutputStream fileOutputStream=new FileOutputStream(file);
			//获取输出内容(以字符串数组存储
			byte buy[]="星光不问赶路人,岁月不负有心人".getBytes();
			//将字符数组中的内容输出到文件对象
			fileOutputStream.write(buy);
			System.out.println("输出完成");
			//关闭输出流
			fileOutputStream.close();
		} catch (Exception e) {
			System.out.println("文件异常");
		}
	}
	//获取输入流
	public void inputStream(){
		//获取文件对象
		File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\word1.txt");
		try {
			//将文件对象加入到输入流中
			FileInputStream fileInputStream=new FileInputStream(file);
			//创建字符数组(准备用来存储字符数据
			byte[] bs=new byte[1024];
			//获取读取流读取字符长度
			int len=fileInputStream.read(bs);
			//输出字符
			System.out.println("文件中的信息是:"+new String(bs,0,len));
			//关闭输入流
			fileInputStream.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

运行截图:
在这里插入图片描述

2、利用JFram来写入文件数据和获取文件数据

public class FileReaderAndFileWriterTest extends JFrame{
	//控制文本域
	private JScrollPane scrollPane;
	private static final long serialVersionUID=1L;
	//创建内容面板对象
	private JPanel jContentPane=null;
	//创建文本域对象
	private JTextArea jTextArea=null;
	//创建控制面板
	private JPanel controlPane=null;
	//创建按钮对象
	private JButton openButton=null;
	private JButton closeButton=null;
	//构造器
	public FileReaderAndFileWriterTest(){
		super();
		//初始化面板
		initialize();
	}
	//设置写入文件按钮
	private JButton getOpenButton(){
		//判断按钮是否为null
		if (openButton==null) {
			//创建按钮对象
			openButton=new JButton();
			//设置按钮的提示信息
			openButton.setText("写入文件");
			openButton.addActionListener(new ActionListener() {
				//按钮的单击事件
				@Override
				public void actionPerformed(ActionEvent e) {
					//创建文件对象
					File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\ReaderAndWriter.txt");
					try{
						//创建FileWriter对象,用于输出数据
						FileWriter out=new FileWriter(file);
						//获取文本域中文件
						String string=jTextArea.getText();
						//将信息写入磁盘文件
						out.write(string);
						//关闭输出流
						out.close();
					}catch (Exception e1) {
						e1.printStackTrace();
					}
				}
			});
			//调试异常
		}else {
			System.out.println("不能输出数据");
		}
		return openButton;
	}
	//设置读取文件按钮
	private JButton getCloseButton(){
		//判断按钮式是否为空
		if (closeButton==null) {
			//创建按钮对象
			closeButton=new JButton();
			//设置提示信息
			closeButton.setText("读取文件");
			//按钮的单击事件
			closeButton.addActionListener(new ActionListener() {
				
				@Override
				public void actionPerformed(ActionEvent e) {
					//创建文件对象
					File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\ReaderAndWriter.txt");
					try{
						//创建输入文件流
						FileReader fileReader=new FileReader(file);
						//创建一个char数组,用来存储读入的数据
						char byt[] =new char[1024];
						//读取数据然后返回将读取的数据
						int len=fileReader.read(byt);
						//将数据写入到文本域中
						jTextArea.setText(new String(byt, 0, len));
						//关闭读入流
						fileReader.close();
					}catch (Exception e1) {
						e1.printStackTrace();
					}
				}
			});
		}
		else {
			System.out.println("不能读入数据");
		}
		return closeButton;
	}
	//初始化容器
	private void initialize(){
		//设置模板大小
		this.setSize(300,200);
		//将面板加入
		this.setContentPane(getJContentPane());
		//创建容器标题
		this.setTitle("JFrame");
	}
	//获取文本域
	private JTextArea getJTextArea(){
		if (jTextArea==null) {
			//创建一个文本域
			jTextArea=new JTextArea();
		}
		return jTextArea;
	}
	private JPanel getControlPanel(){
		if (controlPane==null) {
			//设置控制模板的布局
			FlowLayout flowLayout=new FlowLayout();
			flowLayout.setVgap(1);
			//创建面板
			controlPane=new JPanel();
			controlPane.setLayout(flowLayout);
			controlPane.add(getOpenButton(),null);
			controlPane.add(getCloseButton(),null);
		}
		return controlPane;
	}
	private JPanel getJContentPane(){
		if (jContentPane==null) {
			//创建一个新的模板
			jContentPane=new JPanel();
			//设置模板的布局格式
			jContentPane.setLayout(new BorderLayout());
			//将scrollPane模板设置在中间
			jContentPane.add(getScrollPane(),BorderLayout.CENTER);
			//将控制模板放在南边
			jContentPane.add(getControlPanel(),BorderLayout.SOUTH);
		}
		else {
			System.out.println("你的模板有问题");
		}
		return jContentPane;
	}
	//主方法
	public static void main(String[] args) {
		//创建对象
		FileReaderAndFileWriterTest readerAndWriterTest=new FileReaderAndFileWriterTest();
		readerAndWriterTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		readerAndWriterTest.setVisible(true);
	}
	//创建可变的文本域
	protected JScrollPane getScrollPane(){
		if (scrollPane==null) {
			scrollPane=new JScrollPane();
			scrollPane.setViewportView(getJTextArea());
		}
		return scrollPane;
	}
}

运行截图:
在这里插入图片描述
注意:一次运行只能读取或者写入一次,后面都是一样的文件内容了,你可以开运行两次,获取两个框,一个进行写入,另一个进行读取就行。

3、利用缓冲区来读写文件

public class BufferedReaderAndBufferedWriter {
	public static void main(String[] args) {
		//设置内容数组
		String[] contents={"须知少年拿云志,曾许人间第一流。","总有人间一两风,填我十万八千梦。","心若有所向往,何惧道阻且长。"};
		//创建文件对象
		File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\BufferedReaderAndBufferedWriter.txt");
		try{
			//创建FileWriter对象
			FileWriter fileWriter=new FileWriter(file);
			//创建BufferWriter对象,并且将FileWriter对象加入BufferWriter
			BufferedWriter bufferedWriter=new BufferedWriter(fileWriter);
			//遍历数组
			for(int i=0;i<contents.length;i++){
				//将内容输出
				bufferedWriter.write(contents[i]);
				//将数组中单个元素的以单行的形式写入文件
				bufferedWriter.newLine();
			}
			//关闭输出流和输入流的时候,先开后关,后开先关
			//关闭BufferWriter对象
			bufferedWriter.close();
			//关闭FileWriter对象
			fileWriter.close();
		}catch (Exception e) {
			e.printStackTrace();
		}
		try{
			//创建FileReader对象
			FileReader fileReader=new FileReader(file);
			//创建BufferedReader对象并且将FielReader对象加入到BufferedReader对象中
			BufferedReader bufferedReader=new BufferedReader(fileReader);
			//创建一个空字符串
			String string=null;
			//创建i并且赋值为0
			int i=0;
			//while循环按行读取文件中的值
			while((string=bufferedReader.readLine())!=null){
				i++;
				//在控制台输出读取的数据
				System.out.println("第"+i+"行:"+string);
			}
			//规则同上
			//关闭BufferedReader对象
			bufferedReader.close();
			//关闭FileReader对象
			fileReader.close();
		}catch (Exception e) {
			e.printStackTrace();
		}
	}

}

运行截图:
在这里插入图片描述

4、利用数据输入流和输出流进行文件读取和内容输出

public class DataInputStreamAndDataOutputStream {
	public static void main(String[] args) {
		try{
			//创建文件对象
			File file=new File("F:\\workspace\\Contacts\\src\\com\\zhm\\book5\\IO15\\DataInputStreamAndDataOutputStream.txt");
			//创建FileOutputStream对象,并且将文件对象加入
			FileOutputStream fileOutputStream=new FileOutputStream(file);
			//创建DataOutputStream对象,并且将FileOutputStream加入DataOutputStream对象
			DataOutputStream dataOutputStream=new DataOutputStream(fileOutputStream);
			//将数据按UTF格式写入文件中
			dataOutputStream.writeUTF("使用writeUTF方法写入数据");
			//将数据按Char格式写入文件中
			dataOutputStream.writeChars("使用writeChars方法写入数据");
			//将数据按Byte格式写入文件中
			dataOutputStream.writeBytes("使用writesBytes方法写入数据");
			//关闭输出流
			dataOutputStream.close();
			//创建文件输出流对象,并且将文件对象加入到文件输出流对象中
			FileInputStream fileInputStream=new FileInputStream(file);
			//创建DataInputStream对象,并且将文件输出流对象加入
			DataInputStream dataInputStream=new DataInputStream(fileInputStream);
			//控制台输出按照UTF格式读取的数据
			System.out.println(dataInputStream.readUTF());
			//控制台输出按照Char格式读取的数据
			System.out.println(dataInputStream.readChar());
			//控制台输出按照Byte格式读取的数据
			System.out.println(dataInputStream.readByte());
			//关闭DataInputStream输入流
			dataInputStream.close();
			//关闭文件输入流
			fileInputStream.close();
		}catch (Exception e) {
			e.printStackTrace();
		}
	}

}

运行截图:
在这里插入图片描述
注意:大家发现输出不对劲是正常的,因为用非UTF-8格式存储和读取数据是会乱码的·。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星光下的赶路人star

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值