上机实验8 实现文件的复制访问

实验1 文件的创建

一、实验目的

掌握File类的使用

二、实验内容

1.在d:\xxx\ten下利用File创建文件和文件夹,通过File类的方法,了解文件的相关信息。

三、程序代码

import java.io.File;
import java.io.IOException;

public class CreateFile {
public static void main(String[] args) throws IOException {
	File file1 = new File("d:\\FYX.txt");
	File file2 = new File("d:","HXY.txt");
	File file = new File("d:\\LWL");
	file1.createNewFile();
	file2.createNewFile();
	file.mkdir();
	}
}

实验2 文件的复制

一、实验目的

掌握字节流的读写操作

二、实验内容

1.将d:\abc.txt文件(不存在创建)复制到当前目录,文件名不变。

2.将d:\jieai.jpg文件复制到桌面,文件名改为tupian.jpg

三、程序代码

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

public class CopyFile {
	 public static void main(String[] args) throws IOException {
		   FileInputStream fis=new FileInputStream("d:\\FYX.txt");
		   FileOutputStream fos=new FileOutputStream("d:\\FYX.txt");
		   FileInputStream f1=new FileInputStream("d:\\jieai.jpg");
		   FileOutputStream f2=new FileOutputStream("C:\\Users\\29752\\Desktop\\tupian.jpg");
		   byte[] bys=new byte[1024];
		   int len;
		   while((len=fis.read(bys))!=-1){
			   fos.write(bys, 0, len);
		   }
		   while((len=f1.read(bys))!=-1){
			   f2.write(bys, 0, len);
		   }
		   fis.close();
		   fos.close();
		   f1.close();
		   f2.close();
	    }  
}

四、实验指导

1.采用InputStream流的子类FileInputStream实现文件的读出操作,采用OutputStream流的子类FileOutputStream实现文件的写操作。

2.读文件常用read方法,read方法可以实现一次读取一个字节,一次读取一个字节数组,分别用不同的方法读取文件信息

3.写文件常用write方法,write方法可以实现一次写一个字节,一次写一个字节数组,分别用不同的方法写文件信息。

实验3 记事本程序

一、实验目的

   综合掌握界面编写文件访问的程序

二、实验内容

1.编写如下界面

2.利用所学知识实现文本文件的新建、打开和保存操作

3.查找资料,学会在Java中利用剪贴板实现信息的复制和粘贴操作。

三、程序代码

import java.awt.FileDialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;

import javax.swing.JTextArea;

public class NoteFile extends JFrame {
	JMenuBar jmb;
	JMenu jm1,jm2,jm3,jm4;
	JMenuItem jm11,jm12,jm13,jm14,jm15,jm31,jm32,jm33,jm41;
	JTextArea jta;
	public NoteFile() {
		setTitle("记事本");
		setBounds(300,300,500,400);
		init();
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		jm11.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				setTitle("记事本"+"----未命名");
				jta.setText("");}});
		jm12.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JFileChooser jfc=new JFileChooser();
				int sd = jfc.showOpenDialog(null);
				File file=null;
				if (sd==jfc.APPROVE_OPTION){
					file=jfc.getSelectedFile();
				}
				if (file!=null){
					setTitle("记事本----"+file.getName());
					FileReader fr=null;
					try{//创建文件字符输入流对象
					fr=new FileReader(file);//按字符数组读取信息
					char[] chs=new char[1024];
					int len;
					jta.setText("");//清空文本区内容
					while((len=fr.read(chs))!=-1){//读取文件信息
						//将读取的字符数组添加到文本区中
						jta.append(new String(chs,0,len));
					}
					}catch(IOException e2){//如果有异常,弹出消息框
						JOptionPane.showMessageDialog(null, "文件访问出现问题");
					}finally{//资源的释放放到finally模块中
						if (fr!=null){//如果fr不为空
							try {
								fr.close();
							} catch (IOException e1) {
								// TODO Auto-generated catch block
								e1.printStackTrace();}}}}}});
		jm13.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				FileDialog fd=new FileDialog(NoteFile.this,"打开",FileDialog.LOAD);
				fd.setVisible(true);
				File file=new File(fd.getDirectory()+"\\"+fd.getFile());
				FileReader fr=null;
				try{
				fr=new FileReader(file);
				char[] chs=new char[1024];
				int len;
				jta.setText("");
				while((len=fr.read(chs))!=-1){
					jta.append(new String(chs,0,len));
				} setTitle("记事本----"+file.getName());
				}catch(IOException e2){
				}finally{
					if (fr!=null){
						try {
							fr.close();
						} catch (IOException e1) {
							e1.printStackTrace();}}}}});
		jm14.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//创建保存对话框对象,设置mode,第三个参数表示是打开还是保存
				FileDialog fd=new FileDialog(NoteFile.this,"保存",FileDialog.SAVE);
				//显示对话框
				fd.setVisible(true);//获取用户选择的文件的完整名称
				File file=new File(fd.getDirectory()+"\\"+fd.getFile());
				FileWriter fw=null;
				try{
					fw=new FileWriter(file);//写文本区的数据到文件
					fw.write(jta.getText());
					setTitle("记事本----"+file.getName());
				}catch(IOException e1){
				}finally{
					if (fw!=null){
						try {
							fw.close();
						} catch (IOException e1) {
							e1.printStackTrace();}}}}});
		jm31.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				jta.cut();
			}
		});
		jm32.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				jta.copy();
			}
		});
		jm33.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				jta.paste();
			}
		});
		jm41.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				JOptionPane.showMessageDialog(null, "关于记事本\r\n版本:v1.0\r\n作者:LWL\r\n欢迎使用我的记事本,有问题联系QQ:123456");
			}
		});}
	public void init() {
		jmb=new JMenuBar();
	    jm1=new JMenu("文件");
	    jm3=new JMenu("编辑");
	    jm4=new JMenu("帮助");
	    jm11=new JMenuItem("新建");
	    jm12=new JMenuItem("打开1");
	    jm13=new JMenuItem("打开2");
	    jm14=new JMenuItem("保存");
	    jm15=new JMenuItem("退出");
	    jm31=new JMenuItem("剪切");
	    jm32=new JMenuItem("复制");
	    jm33=new JMenuItem("粘贴");
	    jm41=new JMenuItem("关于");
	    jm1.add(jm11);
	    jm1.add(jm12);
	    jm1.add(jm13);
	    jm1.add(jm14);
	    jm1.add(jm15);
	    jm3.add(jm31);
	    jm3.add(jm32);
	    jm3.add(jm33);
	    jm4.add(jm41);
	    jmb.add(jm1);
	    jmb.add(jm3);
	    jmb.add(jm4);
	    setJMenuBar(jmb);
	    jta=new JTextArea();
	    JScrollPane jsp=new JScrollPane(jta);
	    add(jsp);
	}
	public static void main(String[] args) {
		new NoteFile();
	}
}

四、实验指导

1.菜单相应单击事件一般使用的监听器是ActionListener接口

2.利用JFileChooser()的showSaveDialog(Component a);  showOpenDialog(Component a);两个方法显示保存和打开对话框。通过对话框获取要保存或打开文件的完整路径描述

public File getCurrentDirectory()返回当前目录

public File getSelectedFile() 返回当前选择的文件

3.对于文本文件,常用字符流实现文件的读写操作。

实验四 简单网络爬虫的实现

1.学习URL类,实现将网页文件作为输入流对象

java.net.URL

构造方法   new URL(网址字符串)

创建输入流的方法   openStream:打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。

2.利用网络爬虫原理,掌握Scanner类读取Web文件内容的方法。

import java.util.ArrayList;
import java.util.Scanner;

class WebCrawler{//WebCrawler类
	private String webURL;//私有字段
	public WebCrawler(String u){//WebCrawler类的构造方法
		webURL = u;
	}
void getURL(){//getURL方法
	ArrayList<String>list1 = new ArrayList<>();//存储待处理的URL
	ArrayList<String>list2 = new ArrayList<>();//存储处理过的URL
	list1.add(webURL);//将首地址添加到集合
	while(!list1.isEmpty()&&list2.size()<=20){//循环处理list1中的每个URL
		String urlString = list1.remove(0);//将第一个URL赋值给urlString
		if(!list2.contains(urlString)){
			list2.add(urlString);//添加urlString中的URL值到list2
			System.out.println("发现URL:"+urlString);//输出爬取到的urlString
			for(String s:getSubURL(urlString)){//遍历getSubURL()方法返回的集合
				if(!list2.contains(s))//如果list2中不包含该URL值
					list1.add(s);//将其添加到list1集合中
				}
			}
	}System.out.println("运行结束");
}
//私有字段getSubURL()方法,用于爬取页面中包含的URL数据
private ArrayList<String>getSubURL(String urlString){
	ArrayList<String>list = new ArrayList<>();//用于存储爬取到的URL数据
	try{
	java.net.URL url = new java.net.URL(urlString);//创建java.net.URL类数据
	Scanner val = new Scanner(url.openStream());//读取某个页面的所有数据
	int current = 0;
	while (val.hasNext()){//每次读取一行直到文件尾
		String line = val.nextLine();
		//获取读到的一行中字符串“http:”所处的位置
		current = line.indexOf("http://",current);
		while(current>0){
			//获取读到的一行中最后一个双引号出现的位置
			int endIndex = line.indexOf("\"",current);
			if(endIndex>0){//endIndex若为负值表示没有找到双引号
				list.add(line.substring(current,endIndex));
				//取出“http://xxx/xxx”表示的URL值
				//从endIndex开始查找字符串“http://”所处的位置
				current = line.indexOf("http://",endIndex);
			}else current = -1;//没有找到双引号,设置current为-1
		}
	}val.close();//关闭Scanner对象
}catch (Exception ex){
	System.out.println(ex.getMessage());
}return list;}}//返回爬取的结果集
public class SX7 {//主类
public static void main(String[] args) {//主方法
	Scanner val = new Scanner(System.in);//创建对象
	System.out.println("输入一个Web网站的URL:");
	String url = val.nextLine();//读取用户输入的起始URL数据
	val.close();//关闭对象
	WebCrawler crawler = new WebCrawler(url);//创建一个WebCrawler类对象crawler
	crawler.getURL();//调用crawler对象的getURL()方法
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Meteor.792

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

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

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

打赏作者

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

抵扣说明:

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

余额充值