实验1 文件的创建
一、实验目的
掌握File类的使用
二、实验内容
1.在d:\xxx\ten下利用File创建文件和文件夹,通过File类的方法,了解文件的相关信息。
三、程序代码
1. import java.io.File; 2. import java.io.IOException; 3. 4. public class CreateFile { 5. public static void main(String[] args) throws IOException { 6. File file1 = new File("d:\\FYX.txt"); 7. File file2 = new File("d:","HXY.txt"); 8. File file = new File("d:\\LWL"); 9. file1.createNewFile(); 10. file2.createNewFile(); 11. file.mkdir(); 12. } 13. }
实验2 文件的复制
一、实验目的
掌握字节流的读写操作
二、实验内容
1.将d:\abc.txt文件(不存在创建)复制到当前目录,文件名不变。
2.将d:\jieai.jpg文件复制到桌面,文件名改为tupian.jpg
三、程序代码
1. import java.io.File; 2. import java.io.FileInputStream; 3. import java.io.FileOutputStream; 4. import java.io.IOException; 5. import java.io.InputStream; 6. import java.io.OutputStream; 7. 8. public class CopyFile { 9. public static void main(String[] args) throws IOException { 10. FileInputStream fis=new FileInputStream("d:\\FYX.txt"); 11. FileOutputStream fos=new FileOutputStream("d:\\FYX.txt"); 12. FileInputStream f1=new FileInputStream("d:\\jieai.jpg"); 13. FileOutputStream f2=new FileOutputStream("C:\\Users\\29752\\Desktop\\tupian.jpg"); 14. byte[] bys=new byte[1024]; 15. int len; 16. while((len=fis.read(bys))!=-1){ 17. fos.write(bys, 0, len); 18. } 19. while((len=f1.read(bys))!=-1){ 20. f2.write(bys, 0, len); 21. } 22. fis.close(); 23. fos.close(); 24. f1.close(); 25. f2.close(); 26. } 27. }
四、实验指导
1.采用InputStream流的子类FileInputStream实现文件的读出操作,采用OutputStream流的子类FileOutputStream实现文件的写操作。
2.读文件常用read方法,read方法可以实现一次读取一个字节,一次读取一个字节数组,分别用不同的方法读取文件信息
3.写文件常用write方法,write方法可以实现一次写一个字节,一次写一个字节数组,分别用不同的方法写文件信息。
实验3 记事本程序
一、实验目的
综合掌握界面编写文件访问的程序
二、实验内容
1.编写如下界面
2.利用所学知识实现文本文件的新建、打开和保存操作
3.查找资料,学会在Java中利用剪贴板实现信息的复制和粘贴操作。
三、程序代码
1. import java.awt.FileDialog; 2. import java.awt.event.ActionEvent; 3. import java.awt.event.ActionListener; 4. import java.io.File; 5. import java.io.FileReader; 6. import java.io.FileWriter; 7. import java.io.IOException; 8. 9. import javax.swing.JFileChooser; 10. import javax.swing.JFrame; 11. import javax.swing.JMenu; 12. import javax.swing.JMenuBar; 13. import javax.swing.JMenuItem; 14. import javax.swing.JOptionPane; 15. import javax.swing.JScrollPane; 16. 17. import javax.swing.JTextArea; 18. 19. public class NoteFile extends JFrame { 20. JMenuBar jmb; 21. JMenu jm1,jm2,jm3,jm4; 22. JMenuItem jm11,jm12,jm13,jm14,jm15,jm31,jm32,jm33,jm41; 23. JTextArea jta; 24. public NoteFile() { 25. setTitle("记事本"); 26. setBounds(300,300,500,400); 27. init(); 28. setVisible(true); 29. setDefaultCloseOperation(EXIT_ON_CLOSE); 30. jm11.addActionListener(new ActionListener() { 31. public void actionPerformed(ActionEvent e) { 32. setTitle("记事本"+"----未命名"); 33. jta.setText("");}}); 34. jm12.addActionListener(new ActionListener() { 35. public void actionPerformed(ActionEvent e) { 36. JFileChooser jfc=new JFileChooser(); 37. int sd = jfc.showOpenDialog(null); 38. File file=null; 39. if (sd==jfc.APPROVE_OPTION){ 40. file=jfc.getSelectedFile(); 41. } 42. if (file!=null){ 43. setTitle("记事本----"+file.getName()); 44. FileReader fr=null; 45. try{//创建文件字符输入流对象 46. fr=new FileReader(file);//按字符数组读取信息 47. char[] chs=new char[1024]; 48. int len; 49. jta.setText("");//清空文本区内容 50. while((len=fr.read(chs))!=-1){//读取文件信息 51. //将读取的字符数组添加到文本区中 52. jta.append(new String(chs,0,len)); 53. } 54. }catch(IOException e2){//如果有异常,弹出消息框 55. JOptionPane.showMessageDialog(null, "文件访问出现问题"); 56. }finally{//资源的释放放到finally模块中 57. if (fr!=null){//如果fr不为空 58. try { 59. fr.close(); 60. } catch (IOException e1) { 61. // TODO Auto-generated catch block 62. e1.printStackTrace();}}}}}}); 63. jm13.addActionListener(new ActionListener() { 64. public void actionPerformed(ActionEvent e) { 65. FileDialog fd=new FileDialog(NoteFile.this,"打开",FileDialog.LOAD); 66. fd.setVisible(true); 67. File file=new File(fd.getDirectory()+"\\"+fd.getFile()); 68. FileReader fr=null; 69. try{ 70. fr=new FileReader(file); 71. char[] chs=new char[1024]; 72. int len; 73. jta.setText(""); 74. while((len=fr.read(chs))!=-1){ 75. jta.append(new String(chs,0,len)); 76. } setTitle("记事本----"+file.getName()); 77. }catch(IOException e2){ 78. }finally{ 79. if (fr!=null){ 80. try { 81. fr.close(); 82. } catch (IOException e1) { 83. e1.printStackTrace();}}}}}); 84. jm14.addActionListener(new ActionListener() { 85. public void actionPerformed(ActionEvent e) { 86. //创建保存对话框对象,设置mode,第三个参数表示是打开还是保存 87. FileDialog fd=new FileDialog(NoteFile.this,"保存",FileDialog.SAVE); 88. //显示对话框 89. fd.setVisible(true);//获取用户选择的文件的完整名称 90. File file=new File(fd.getDirectory()+"\\"+fd.getFile()); 91. FileWriter fw=null; 92. try{ 93. fw=new FileWriter(file);//写文本区的数据到文件 94. fw.write(jta.getText()); 95. setTitle("记事本----"+file.getName()); 96. }catch(IOException e1){ 97. }finally{ 98. if (fw!=null){ 99. try { 100. fw.close(); 101. } catch (IOException e1) { 102. e1.printStackTrace();}}}}}); 103. jm31.addActionListener(new ActionListener() { 104. public void actionPerformed(ActionEvent e) { 105. jta.cut(); 106. } 107. }); 108. jm32.addActionListener(new ActionListener() { 109. public void actionPerformed(ActionEvent e) { 110. jta.copy(); 111. } 112. }); 113. jm33.addActionListener(new ActionListener() { 114. public void actionPerformed(ActionEvent e) { 115. jta.paste(); 116. } 117. }); 118. jm41.addActionListener(new ActionListener() { 119. public void actionPerformed(ActionEvent arg0) { 120. JOptionPane.showMessageDialog(null, "关于记事本\r\n版本:v1.0\r\n作者:LWL\r\n欢迎使用我的记事本,有问题联系QQ:123456"); 121. } 122. });} 123. public void init() { 124. jmb=new JMenuBar(); 125. jm1=new JMenu("文件"); 126. jm3=new JMenu("编辑"); 127. jm4=new JMenu("帮助"); 128. jm11=new JMenuItem("新建"); 129. jm12=new JMenuItem("打开1"); 130. jm13=new JMenuItem("打开2"); 131. jm14=new JMenuItem("保存"); 132. jm15=new JMenuItem("退出"); 133. jm31=new JMenuItem("剪切"); 134. jm32=new JMenuItem("复制"); 135. jm33=new JMenuItem("粘贴"); 136. jm41=new JMenuItem("关于"); 137. jm1.add(jm11); 138. jm1.add(jm12); 139. jm1.add(jm13); 140. jm1.add(jm14); 141. jm1.add(jm15); 142. jm3.add(jm31); 143. jm3.add(jm32); 144. jm3.add(jm33); 145. jm4.add(jm41); 146. jmb.add(jm1); 147. jmb.add(jm3); 148. jmb.add(jm4); 149. setJMenuBar(jmb); 150. jta=new JTextArea(); 151. JScrollPane jsp=new JScrollPane(jta); 152. add(jsp); 153. } 154. public static void main(String[] args) { 155. new NoteFile(); 156. } 157. }
四、实验指导
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文件内容的方法。
1. import java.util.ArrayList; 2. import java.util.Scanner; 3. 4. class WebCrawler{//WebCrawler类 5. private String webURL;//私有字段 6. public WebCrawler(String u){//WebCrawler类的构造方法 7. webURL = u; 8. } 9. void getURL(){//getURL方法 10. ArrayList<String>list1 = new ArrayList<>();//存储待处理的URL 11. ArrayList<String>list2 = new ArrayList<>();//存储处理过的URL 12. list1.add(webURL);//将首地址添加到集合 13. while(!list1.isEmpty()&&list2.size()<=20){//循环处理list1中的每个URL 14. String urlString = list1.remove(0);//将第一个URL赋值给urlString 15. if(!list2.contains(urlString)){ 16. list2.add(urlString);//添加urlString中的URL值到list2 17. System.out.println("发现URL:"+urlString);//输出爬取到的urlString 18. for(String s:getSubURL(urlString)){//遍历getSubURL()方法返回的集合 19. if(!list2.contains(s))//如果list2中不包含该URL值 20. list1.add(s);//将其添加到list1集合中 21. } 22. } 23. }System.out.println("运行结束"); 24. } 25. //私有字段getSubURL()方法,用于爬取页面中包含的URL数据 26. private ArrayList<String>getSubURL(String urlString){ 27. ArrayList<String>list = new ArrayList<>();//用于存储爬取到的URL数据 28. try{ 29. java.net.URL url = new java.net.URL(urlString);//创建java.net.URL类数据 30. Scanner val = new Scanner(url.openStream());//读取某个页面的所有数据 31. int current = 0; 32. while (val.hasNext()){//每次读取一行直到文件尾 33. String line = val.nextLine(); 34. //获取读到的一行中字符串“http:”所处的位置 35. current = line.indexOf("http://",current); 36. while(current>0){ 37. //获取读到的一行中最后一个双引号出现的位置 38. int endIndex = line.indexOf("\"",current); 39. if(endIndex>0){//endIndex若为负值表示没有找到双引号 40. list.add(line.substring(current,endIndex)); 41. //取出“http://xxx/xxx”表示的URL值 42. //从endIndex开始查找字符串“http://”所处的位置 43. current = line.indexOf("http://",endIndex); 44. }else current = -1;//没有找到双引号,设置current为-1 45. } 46. }val.close();//关闭Scanner对象 47. }catch (Exception ex){ 48. System.out.println(ex.getMessage()); 49. }return list;}}//返回爬取的结果集 50. public class SX7 {//主类 51. public static void main(String[] args) {//主方法 52. Scanner val = new Scanner(System.in);//创建对象 53. System.out.println("输入一个Web网站的URL:"); 54. String url = val.nextLine();//读取用户输入的起始URL数据 55. val.close();//关闭对象 56. WebCrawler crawler = new WebCrawler(url);//创建一个WebCrawler类对象crawler 57. crawler.getURL();//调用crawler对象的getURL()方法 58. } 59. }