现在的位置: 首页 > 综合 > 正文

根据txt内容生成html博客名单

2018年05月14日 ⁄ 综合 ⁄ 共 6222字 ⁄ 字号 评论关闭

今天用java粗略实现了丁又专老师之前在博客发表的题目--“附加题及示例代码(写HTML文件):根据给定的博客名单,自动生成HTML网页,完成后回看丁老师发布的实现代码--“批量生成HTML文件,通过
学生名单(学号、姓名) 与 博客名单(姓名、网址)
”,看到自己对写代码的规范要求实在太不严格了,感觉自己是在针对实现个别问题而完成工作,而不是针对类别问题而去实现。


参考博客名单资料:blog_list_wl131.txt若有冒犯之处,还请及时联系,谢谢。


往后应以此为鉴,多去思考如何解决一类问题,而不是解决一个问题。


既然写了出来,把结果呈现,并以此提醒自己。此程序读取的txt文件格式只能是参考格式,默认跳过文件第一行不读取。待完善功能:自定义跳过行数,博客数据的格式自定义(采用正则式匹配)。

生成的html博客列表名单如下:

CSDN博客列表
     
陈鹏 林炳权 谢锐鹏 魏凯毅 谈健安
李家华 薛伟良 杨洁莹 廖志伟 黄杰
郑楷山 李芷婷 陈培凯 林开辉 郭海燕
庄勤达 何志云 陈剑洪 梁业锋 李钊
黎家成 李晓毅 蔡勇涛 黄泽茂 陈思颖
温明玉 刘松浩 沈鸿伟 张金生 苏文斌
王金泽

代码展示:

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.



抱歉!评论已关闭.