今天用java粗略实现了丁又专老师之前在博客发表的题目--“附加题及示例代码(写HTML文件):根据给定的博客名单,自动生成HTML网页”,完成后回看丁老师发布的实现代码--“批量生成HTML文件,通过
学生名单(学号、姓名) 与 博客名单(姓名、网址)”,看到自己对写代码的规范要求实在太不严格了,感觉自己是在针对实现个别问题而完成工作,而不是针对类别问题而去实现。
参考博客名单资料:blog_list_wl131.txt。若有冒犯之处,还请及时联系,谢谢。
往后应以此为鉴,多去思考如何解决一类问题,而不是解决一个问题。
既然写了出来,把结果呈现,并以此提醒自己。此程序读取的txt文件格式只能是参考格式,默认跳过文件第一行不读取。待完善功能:自定义跳过行数,博客数据的格式自定义(采用正则式匹配)。
生成的html博客列表名单如下:
陈鹏 | 林炳权 | 谢锐鹏 | 魏凯毅 | 谈健安 |
李家华 | 薛伟良 | 杨洁莹 | 廖志伟 | 黄杰 |
郑楷山 | 李芷婷 | 陈培凯 | 林开辉 | 郭海燕 |
庄勤达 | 何志云 | 陈剑洪 | 梁业锋 | 李钊 |
黎家成 | 李晓毅 | 蔡勇涛 | 黄泽茂 | 陈思颖 |
温明玉 | 刘松浩 | 沈鸿伟 | 张金生 | 苏文斌 |
王金泽 |
代码展示:
1.FileChoice.java
package txt2html; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; public class FileChoice extends JFrame{ private String path = null;//源文件所在路径 private String outHtmlName = null;//生成文件路径+文件名 public FileChoice(){ JPanel center = new JPanel(); center.setLayout(null); JLabel sourceName = new JLabel("源文件:"); JLabel fileName = new JLabel("生成的网页文件名:"); final JTextField sourceNameInput = new JTextField(); final JTextField fileNameInput = new JTextField(); sourceName.setBounds(30,20,50, 30); sourceNameInput.setBounds(90,23,160,22); fileName.setBounds(30,60,130, 30); fileNameInput.setBounds(150,63,100,22); sourceNameInput.setEditable(false);//源文件路径不可编辑 JButton chooseTxt = new JButton("选择文件"); JButton confirm = new JButton("确定"); JButton cancel = new JButton("取消"); chooseTxt.setBounds(30,110,100, 30); confirm.setBounds(140,110,60, 30); cancel.setBounds(210,110,60, 30); //选择文件按钮监听 chooseTxt.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0){ //弹出文件选择对话框 JFileChooser c = new JFileChooser(); c.setDialogTitle("请选择博客名单源文件");//标题栏 int result = c.showOpenDialog(null); //点击确定按钮 if(JFileChooser.APPROVE_OPTION == result) { FileChoice.this.path = c.getSelectedFile().getPath();//获取选择文件的路径 sourceNameInput.setText(FileChoice.this.path); outHtmlName = sourceNameInput.getText().toString().trim(); } } }); //确定按钮监听 confirm.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { try { //源文件不能为空 if(sourceNameInput.getText().toString().trim().length()==0) JOptionPane.showMessageDialog(FileChoice.this,"源文件名错误,请重新选择。"); //生成文件名不能为空 else if(fileNameInput.getText().toString().trim().length()==0) JOptionPane.showMessageDialog(FileChoice.this,"请输入生成文件名。"); else{ //截取路径,除去源文件名称和扩展名 outHtmlName = outHtmlName.substring(0,outHtmlName.lastIndexOf("\\"))+"\\"; outHtmlName = outHtmlName+fileNameInput.getText().toString().trim()+".html"; new Out2Html(sourceNameInput.getText().toString().trim(),outHtmlName); } } catch (Exception e) { e.printStackTrace(); } fileNameInput.setText(""); } }); //取消按钮监听 cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { System.exit(0); } }); center.add(sourceName); center.add(sourceNameInput); center.add(fileName); center.add(fileNameInput); center.add(chooseTxt); center.add(confirm); center.add(cancel); this.setTitle("生成blog网页名册"); this.add(center,BorderLayout.CENTER); this.setVisible(true); this.setBounds(300, 200, 300, 200); this.setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new FileChoice(); } }
2.Out2Html.java
package txt2html; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.PrintStream; import javax.swing.JFrame; import javax.swing.JOptionPane; public class Out2Html extends JFrame{ /** * @param path 源文件路径 * @param outHtmlName 输出文件名 */ //源文件名单文件路径,格式:名称+空格+博客地址。首行标题忽略。 public Out2Html(String path,String outHtmlName) throws Exception{ File file = new File(outHtmlName); PrintStream outFile = null; //存在文件名相同则取消 if(file.exists()){ JOptionPane.showMessageDialog(this,"已存在文件:"+outHtmlName); } else{ outFile = new PrintStream(file); String lineData = null; StringBuffer web = new StringBuffer();//字符串,用于设置页面内容 web.append("<!DOCTYPE html PUBLIC "+"-//W3C//DTD XHTML 1.0 Transitional//EN"); web.append("http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"+">"); web.append("<html xmlns="+"http://www.w3.org/1999/xhtml"+">"); web.append("<head>"); web.append("<title>studentList</title>"); web.append("<style type="+"text/css"+">"); web.append(".name {font-size: 16px; font-weight: bold;}"); web.append("a:link {color: #00F;"); web.append("text-decoration: none}"); web.append("a:visited {color: #00F;"); web.append("text-decoration: none}"); web.append("a:hover {color: #09C;"); web.append("text-decoration: none}"); web.append("a:active {color: #09C;"); web.append("text-decoration: none}"); web.append("</style>"); web.append("</head>"); web.append("<body><table width='600' border='0' align='center' style='margin-top:100px;'>"); web.append("<caption height='80' align='center' valign='middle'>CSDN博客列表</caption>"); web.append("<tr height='30'><td></td><td></td><td></td></tr><tr>"); //得到文件,并用输入流读取文件内容 File inputFile = new File(path); InputStreamReader read = new InputStreamReader(new FileInputStream(inputFile), "GBK"); BufferedReader bufferedReader = new BufferedReader(read); String[] user = new String[2];//获取每一行数据 bufferedReader.readLine();//文档首行标题不要 //从第二行开始读起 while((lineData = bufferedReader.readLine()) != null){ String[] info = lineData.split("\\s+"); for(int n=0;n<info.length;n++){ user[n] = info[n]; } web.append("<tr height='40'><td align='center' valign='middle'><a href='"+user[1]+"'>"+user[0]+"</a></td>"); if((lineData = bufferedReader.readLine())!=null){ //换行获取数据 info = lineData.split("\\s+"); for(int n=0;n<info.length;n++){ user[n] = info[n]; } web.append("<td align='center'><a href='"+user[1]+"'>"+user[0]+"</a></td>"); } if((lineData = bufferedReader.readLine())!=null){ //换行获取数据 info = lineData.split("\\s+"); for(int n=0;n<info.length;n++){ user[n] = info[n]; } web.append("<td align='center'><a href='"+user[1]+"'>"+user[0]+"</a></td>"); } if((lineData = bufferedReader.readLine())!=null){ //换行获取数据 info = lineData.split("\\s+"); for(int n=0;n<info.length;n++){ user[n] = info[n]; } web.append("<td align='center'><a href='"+user[1]+"'>"+user[0]+"</a></td>"); } if((lineData = bufferedReader.readLine())!=null){ //换行获取数据 info = lineData.split("\\s+"); for(int n=0;n<info.length;n++){ user[n] = info[n]; } web.append("<td align='center'><a href='"+user[1]+"'>"+user[0]+"</a></td></tr>"); } } web.append("</table></body></html>"); outFile.println(web.toString());//输出html文件 read.close(); outFile.close(); JOptionPane.showMessageDialog(this,"成功生成文件:"+outHtmlName); } } }
测试结果:
1.
2.
3.
4.
5.
6.
7.