文件操作基础及其举例

模块9 文件操作

学习目标:
理解流的概念和作用
理解字节流与字符流的异同
了解文件选择框的使用
掌握常用的输入/输出流类的使用

File类:

特点:可以表示文件,但不能获取文件的内容。

构造方法:

File(文件名或文件目录)
eg: File file=new File(“text . txt”)

利用File类的方法访问文件或目录的属性,具体如下:

file. exists(); //判断文件或目录是否存在
file. isFile();//判断是否是文件
file. isDirectory();//判断是否是目录
file. getName();//获取文件或目录的名字
file. getPath();//获取文件或目录的路径
file. getAbsolutePath();//获取文件或目录的绝对路径
file. lastModified();//获取文件或目录的最后修改日期
file. length();//获取文件或目录的大小,单位是字节

File类方法举例:

package com.java.file;

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

public class TestFile {

   public static void main(String[] args) {
	
	File file = new File("C:\\1.txt");	
	System.out.println("文件是否存在?"+file.exists());
	System.out.println("是文件吗?"+file.isFile());
	System.out.println("是目录吗?"+file.isDirectory());
	System.out.println("名称是:"+file.getName());
	System.out.println("路径是:"+file.getPath());
	System.out.println("绝对路径是:"+file.getAbsolutePath());
	System.out.println("最后修改日期为:"+file.lastModified());
	System.out.println("最后修改日期为:"+new Date(file.lastModified()));
	System.out.println("文件的大小为"+file.length()+"个字节");
	
	}

}

流:

读文件是指把文件中的数据读取到内存,即输入;反之,写文件就是把内存中的数据写到文件中,即输出。

字节流与字符流:

字节流:
InputStream(抽象类,不能用来创建对象)
OutputStream(抽象类,不能用来创建对象)

文件输入流:
FileInputStream(InputStream子类,可以用来创建对象)

利用文件输入流类的方法读取文本文件数据:

file. available();//可读取的字节数
file.read();//读取文件数据
int read(byte[ ] b);
file. close();//关闭文件输入流对象

举例:

 package com.java.file;

 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;

public class DemoFileInputStream1 {

public static void main(String[] args) throws IOException {

	FileInputStream fin = new FileInputStream("C:\\1.txt");//定义输入流
	
	int n;
	n= fin.available();//查看有多少个字节
	System.out.println("有"+n+"个字节可读取");
	
	int i;
	i = fin.read();//从输入流读取一个字节
	System.out.println((char)i);//显示读取到的内容
	
	fin.close();//关闭输入流
 }

}

文件输出流:

FileoutputStream(OutputStream子类,可以用来创建对象)

利用文件输出流类的方法读取文本文件数据:
void write(int b);//向输入流写入一个字节
void write(byte[ ] b);
void write(byte[ ] b, int index, int length );
void close();//关闭输出流

举例:

package com.java.file;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class DemoFileOutputStream {

public static void main(String[] args) throws Exception {
	
	FileOutputStream fout = new FileOutputStream("C:\\2.txt");
	fout.write(65);
	byte[] b ="中国和俄罗斯".getBytes();//字符串转化成byte类型数据
	fout.write(b);
	fout.write("\r\n".getBytes());
	fout.write(b, 6, 6);


	fout.close();
}

}

字符流:

Reader(抽象类,不能用来创建对象)
Writer(抽象类,不能用来创建对象)

字符输出流:

BufferedReader和FileReader(Reader子类,可以用来创建对象)
BufferedWriter和FileWriter(Writer子类,可以用来创建对象)

利用BufferedReader类的方法读取文本文件的数据:
br. read();
int read(char[ ] c);
br. close();

注:字符串可通过getBytes( )方法转换成byte类型数据。

FileReader举例1;

package com.java.file;

import java.io.FileNotFoundException;
import java.io.FileReader;

public class TestFileReader1 {

public static void main(String[] args) throws Exception {
	
	FileReader fr = new FileReader("C:\\3.txt");
	
//		int i;
//		while((i=fr.read())!=-1) {
 //		System.out.print((char)i);
//		}
	
	
	    char[] c = new char[20];
    	fr.read(c);
//		for(char x:c) {
//		System.out.print(x);
//		}
	    String s = String.valueOf(c);
        s = s.trim();
	    System.out.println(s);
	
	    fr.close();

    }

}

举例2:

package com.java.file;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileNotFoundException;
import java.io.FileReader;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class TestFileReader2 {

public static void main(String[] args) throws Exception {

	//在窗口中放置一个文本框和一个按钮,当点击按钮时
	//将c盘中3.txt文档中的内容读取到文本框中显示
	
	FileReader fr = new FileReader("C:\\3.txt");
	JFrame f= new JFrame();
	JTextArea t = new JTextArea();//创建文本域
	JButton b = new JButton("按钮1");
	
	char[] c = new char[20];//文本输入有关
	fr.read(c);//读取文件内容到数组中
	String s = String.valueOf(c);//将字符数组转化为字符串
	s.trim();//裁剪字符串首尾多余的空格
		
	
	b.addActionListener(new ActionListener() {

		@Override
		public void actionPerformed(ActionEvent e) {
			
			//t.replaceSelection(s);//将文本域中选定的文字内容替换成指定内容
			t.setText(s);//设置文本域中的内容为指定内容
			
		}
		
	});
	
	
	b.setSize(100, 100);
	t.setBounds(100, 100, 1000, 1000);
	
	f.add(t);
	f.add(b);
	f.setLayout(new FlowLayout());//设置窗口为流式布局
	f.setBounds(1500, 200, 400, 400);
	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	f.setVisible(true);
}

}

FileWriter举例1:

package com.java.file;

import java.io.FileWriter;
import java.io.IOException;

public class TestFileWriter1 {

public static void main(String[] args) throws IOException {
	
	
	FileWriter fw = new FileWriter("C:\\4.txt");
	fw.write("职业学院");
	fw.close();
	
}

}

举例2:

package com.java.file;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;

public class TestFileWriter2 {

public static void main(String[] args) throws IOException   {


	JFrame f= new JFrame();
	FileWriter x = new FileWriter("C:\\test.txt");
	JButton b = new JButton("保存");
	JTextArea y = new JTextArea(1,5);
	
	b.addActionListener(new ActionListener() {

		@Override
		public void actionPerformed(ActionEvent e) {
			
			
			try {
				String w=y.getText();
				x.write(w);
				x.close();
			} catch (IOException e1) {
				// TODO 自动生成的 catch 块
				e1.printStackTrace();
			}
			
			
		}
		
		});
	
	f.add(b);
	f.add(y);
	f.setLayout(new FlowLayout());
	f.setSize(400, 400);
	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	f.setVisible(true);
	x.close();
	
}

}

提高数据传输速度-----字节缓冲流:

字节缓冲输入流:BufferedInputStream
字节缓冲输出流:BufferedOutputStream

构造方法:

字节缓冲输入流:BufferedInputStream(文件输入流对象)
字节缓冲输出流:BufferedOutputStream(文件输出流对象)

输入:int read();
输出:write( int );

举例:

package com.java.file;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class DemoBufferedStream {

public static void main(String[] args) throws Exception {

	FileOutputStream fout = new FileOutputStream("C:\\王菲.mp3");
	FileInputStream fin = new FileInputStream("C:\\红豆.mp3");
	
	BufferedInputStream bin = new BufferedInputStream(fin);
	BufferedOutputStream bout = new BufferedOutputStream(fout);
	
	long t0 = System.currentTimeMillis()/1000;
	System.out.println(t0);
	
	int i;
	while((i = bin.read())!=-1) {
		bout.write(i);
	}
	
	bin.close();
	bout.close();
	
	long t1 = System.currentTimeMillis()/1000;
	System.out.println(t1);
	System.out.println(t1-t0);
	
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值