开始工作了

七 19th, 2010
70 次浏览 | 3 条评论

到深圳几天了,今天公司组织了集体培训,明天开始就到公司总部上班了。每天早上要6点多起床,7点半的班车,8点半上班。下午6点下班,晚上7点半的班车回宿舍。这样算下来,如果上班的话一天就只能有晚上8点到11点的三个小时归自己所有,除去洗澡洗衣服的半个小时,还剩两个半。对于工作日看来真是没啥好指望的了,不知道周末会是什么感觉。

最近大家都在忙着找房子,昨天也去看了一下,确实不好找。我想找个离公司近点的,这样就可以多睡一会,不用赶7点半的班车。不过离公司近的都比较贵,房子又少,看来是没啥希望了。慢慢来吧

标签: ,

六一快乐!

六 1st, 2010
260 次浏览 | 7 条评论

今天是六一儿童节,祝各位小盆友和大盆友节日快乐!不知不觉有10天没写博客了,话说自从用了微博以后博客就越发写的少了。近来也忙于毕设的事情,更少的时间写博客,做网站了。现在还在更新的就只有每日一站这一颗独苗,其它数个网站都被我无情的冷落了……

先好好过完这最后一个月吧,毕业的人都是一杯具。。。

标签:

struts2中使用jsp:forward命令

五 21st, 2010
282 次浏览 | 4 条评论

工程中用到了struts2,index.jsp中使用jsp:forward命令跳转来执行action,web.xml中需要做如下配置:

<filter-mapping>
 <filter-name>struts2</filter-name>
 <url-pattern>/*</url-pattern>
 <dispatcher>REQUEST</dispatcher>
 <dispatcher>FORWARD</dispatcher>
 </filter-mapping>

不明白为什么要这样配置,有时间好好研究一下。如果觉得配置web.xml很麻烦,不如使用jstl的redirect标签来跳转,可以达到一样的效果。

<c:redirect url="/login.action"></c:redirect>
标签:

java备份mysql数据库

五 20th, 2010
198 次浏览 | 没有评论

java备份mysql数据库的备忘。开始找了个非常长的程序,通过读取控制台执行备份命令后的输出再保存为文件,显得十分麻烦。想到命令行里有重定向符号,可以将输出直接保存为文件,修改后程序就十分短了。

执行的时候mysql的bin目录一定要在path里面。早上在添加了环境变量之后没有重启Eclipse,程序一直没跑过。

package com.ooobj.db;

public class DBBackup {

 public void backup() {
 try {
 String mysql = "mysqldump -uroot -padmin dianiks > D:/temp/dianiks.sql";
 java.lang.Runtime.getRuntime().exec("cmd /c " + mysql);
 } catch (Exception e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 }

 public void load() {

 try {
 String mysql = "mysqladmin -uroot -padmin create dianiks";
 java.lang.Runtime.getRuntime().exec("cmd /c " + mysql);
 String path = "mysql -uroot -padmin dianiks < D:/temp/dianiks.sql";
 java.lang.Runtime.getRuntime().exec("cmd /c " + path);
 } catch (Exception e) {
 // TODO: handle exception
 e.printStackTrace();
 }
 }

 public static void main(String[] args) {
 DBBackup db = new DBBackup();
 db.backup();
 db.load();
 }

}
标签:

调试工具1.1版

五 17th, 2010
131 次浏览 | 没有评论

上周写了个调试工具,功能很简单http://www.ooobj.com/2010/05/debug-tool/。今天给加了个查找的功能,代码从网上找的记事本代码中抽出来的,呵呵。

部分代码:

private DebugMsg() {
 f = new JFrame("调试工具");
 Container contentPane = f.getContentPane();
 contentPane.setLayout(new BorderLayout());

 textArea = new JTextArea(20, 40);
 textArea.setEditable(false);
 JScrollPane scroll = new JScrollPane(textArea);

 JButton clear = new JButton("清除");
 clear.addActionListener(new ActionListener() {
 public void actionPerformed(ActionEvent e) {
 clearText();
 }
 });

 JMenuBar menuBar = new JMenuBar();
 JMenu toolMenu = new JMenu("工具");
 menuBar.add(toolMenu);
 JMenu helpMenu = new JMenu("帮助");
 menuBar.add(helpMenu);

 JMenuItem helpItem = new JMenuItem("使用帮助");
 helpItem.addActionListener(new ActionListener(){
 public void actionPerformed(ActionEvent e) {
 textArea.setText("Ctrl+F 查找\n" +
 "Ctrl+D 清除消息\n" +
 "Ctrl+Q 退出\n" +
 "查看更新:www.ooobj.com\n");
 }
 });
 helpMenu.add(helpItem);

 JMenuItem findItem = new JMenuItem("查找");
 findItem.addActionListener(new ActionListener() {
 public void actionPerformed(ActionEvent e) {
 mySearch();
 }
 });
 findItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, Event.CTRL_MASK));
 toolMenu.add(findItem);

 JMenuItem clearItem = new JMenuItem("清除");
 clearItem.addActionListener(new ActionListener() {
 public void actionPerformed(ActionEvent e) {
 clearText();
 }
 });
 clearItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, Event.CTRL_MASK));
 toolMenu.add(clearItem);

 JMenuItem quitItem = new JMenuItem("退出");
 quitItem.addActionListener(new ActionListener() {
 public void actionPerformed(ActionEvent e) {
 System.exit(-1);
 }
 });
 quitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, Event.CTRL_MASK));
 toolMenu.add(quitItem);

 contentPane.add(scroll, BorderLayout.CENTER);
 contentPane.add(clear, BorderLayout.SOUTH);
 contentPane.add(menuBar, BorderLayout.NORTH);

 f.pack();
 f.setVisible(true);
 f.addWindowListener(new WindowAdapter() {
 public void windowClosing(WindowEvent e) {
 System.exit(0);
 }
 });

 }

调试工具1.1代码下载

调试工具

标签:

冠军!永恒的纪念

五 13th, 2010
270 次浏览 | 7 条评论

系里的毕业杯足球赛落下帷幕,我们电34终于夺冠了!冠军之路可谓是一波三折。半决赛中发生险些被淘汰,但是在点球大战中力克对手晋级决赛。星期一半决赛,星期三决赛,休息的时间太短,队员的体力普遍没有恢复。而对方已经休息了一个星期了,但是我们也有优势,刚赢了球,士气正盛。三天内踢了两场硬仗,而且都拿下了。在即将离校的时刻,这个冠军真的太有意义了。平时大家各忙各的,很少有时间一起组织活动,难得有个机会一起拼搏。相信这次比赛将会是大家在大学中最有意义的一件事情!

十年后聚会,我们还要一起喊:我们是冠军!

冠军队伍合影

决赛队伍合影

标签:

一个简单的信息输出调试工具

五 9th, 2010
269 次浏览 | 4 条评论

平时做项目经常需要debug但是没办法debug,于是都要system.out来查看相关的信息。前几天做项目的时候突然发现system.out失灵了,估计是在哪里被重定向了,急切间又找不到在哪个地方恢复。于是自己写了一个小工具来帮助开发。

package com.ooobj.debug;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class DebugMsg {

 private JTextArea textArea = null;

 private static DebugMsg dm = null;

 public static DebugMsg getInstance() {
 if (dm == null) {
 dm = new DebugMsg();
 }
 return dm;
 }

 private DebugMsg() {
 JFrame f = new JFrame("Debug Message");
 Container contentPane = f.getContentPane();
 contentPane.setLayout(new BorderLayout());

 textArea = new JTextArea(20, 40);
 textArea.setEditable(false);
 JScrollPane scroll = new JScrollPane(textArea);

 JButton clear = new JButton("Clear Messages");
 clear.addActionListener(new ActionListener() {
 public void actionPerformed(ActionEvent e) {
 clearText();
 }
 });

 contentPane.add(scroll, BorderLayout.CENTER);
 contentPane.add(clear, BorderLayout.SOUTH);

 f.pack();
 f.setVisible(true);
 f.addWindowListener(new WindowAdapter() {
 public void windowClosing(WindowEvent e) {
 System.exit(0);
 }
 });

 }

 private void clearText() {
 textArea.setText("");
 }

 public void writeText(String text) {
 textArea.append(text);
 }

 public static void outMsg(String msg) {
 DebugMsg t = DebugMsg.getInstance();
 t.writeText(msg + "\n");
 }

}

功能很简单,只一个输出窗口输出信息,还有一个清除按钮可以清除信息。使用了单例模式,这样只需要使用DebugMsg.outMsg()就可以输出信息。

后面有时间的话还打算继续完善一下,可以增加查找功能,可以在输出信息中查找相关词语;还有高亮功能,可以让不同地方输出的信息背景颜色不一样。

标签:

微博好强大

五 5th, 2010
235 次浏览 | 3 条评论

一个星期前给每日一站也开通了一个腾讯微博,不想发展的十分顺利,今天已经达到了200听众。要知道,RSS订阅达到200人我可是花了半年的时间,相比之下,微博的力量实在是太强大了。

要增加听众其实蛮简单的一件事情,只要记住一个原则,要想别人关注你,先要去关注别人。腾讯微博最多能收听2000人,都加满吧。而且尽量选择那些听众比较少的,这样他才会关注你。腾讯微博限定每天只能收听50人,其实这有个bug。当你收听了50人以后,关闭网页,关闭QQ。过半个小时再来,又可以再收听50人。

微博文章要简短而吸引人。发文章的时间我觉得应该是晚上8点左右,这时候是在线的高峰期。

每日一站的微博: http://t.qq.com/dailysite_

标签:

JAVA连接FTP测试

五 4th, 2010
275 次浏览 | 没有评论

毕设中要连接FTP,于是找了一下JAVA连接ftp的方法。发现有两个比较常用的包,一个是JDK自带的sun.net.ftp,功能比较简单。一个是org.apache.commons.net.ftp。这里先用sun.net.ftp写个Demo。

package com.ooobj.test;

import java.io.DataInputStream;
import java.io.IOException;

import sun.net.ftp.FtpClient;

public class FTPTest {

 public static void main(String[] args) {
 try {
 FtpClient fc = new FtpClient("192.168.7.128", 21);
 fc.login("ooobj", "123");
 System.out.println(fc.pwd());
 DataInputStream dis = new DataInputStream(fc.nameList("."));
 String s = "";
 while ((s = dis.readLine()) != null) {
 System.out.println(new String(s.getBytes("ISO-8859-1"),"GBK"));
 }
 } catch (IOException e) {
 e.printStackTrace();
 }

 }

}

其中nameList()方法是列出文件,不包括文件夹。list()方法则列出文件和文件夹。sun.net.ftp提供的字符编码是”ISO-8859-1″,需要在读取的时候转换,比较麻烦。

标签:

Java的Properties类使用实例

五 1st, 2010
242 次浏览 | 2 条评论

一个工程项目通常需要将相关的属性配置到.properties或.xml文件中,在java.util 包下面有一个类 Properties,可以专门读写这类文件。本文通过四个实例分别对.properties或.xml文件进行读写来学习Properties类的使用。

test.properties

database.driver=com.mysql.jdbc.Driver
database.url=jdbc:mysql://localhost:3306/test
database.username=root
database.password=123

test.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="database.driver">com.mysql.jdbc.Driver</entry>
<entry key="database.url">jdbc:mysql://localhost:3306/test</entry>
<entry key="database.username">root</entry>
<entry key="database.password">123</entry>
</properties>

测试代码:

public class PropertiesTest {

 public void readProperties(){
 Properties props = new Properties();

 try {
 long beginTime = System.currentTimeMillis();
 props.load(getClass().getResourceAsStream("test.properties"));
 long endTime = System.currentTimeMillis();
 System.out.println("Use time: " + (endTime - beginTime));
 } catch (IOException e) {
 e.printStackTrace();
 }

 System.out.println(props.getProperty("database.driver"));
 System.out.println(props.getProperty("database.username"));

 }

 public void readXMLProperties(){
 Properties props = new Properties();

 try {
 long beginTime = System.currentTimeMillis();
 props.loadFromXML(getClass().getResourceAsStream("test.xml"));
 long endTime = System.currentTimeMillis();
 System.out.println("Use time: " + (endTime - beginTime));
 } catch (IOException e) {
 e.printStackTrace();
 }

 System.out.println(props.getProperty("database.driver"));
 System.out.println(props.getProperty("database.username"));
 }

 public void writeProperties(){
 Properties props = new Properties();
 props.setProperty("username", "test_username");
 props.setProperty("password", "test_password");
 PrintStream fw;
 try {
 long beginTime = System.currentTimeMillis();
 fw = new PrintStream(new File("testwrite.properties"));
 props.list(fw);
 long endTime = System.currentTimeMillis();
 System.out.println("Write properties use time: " + (endTime - beginTime));
 } catch (FileNotFoundException e) {
 e.printStackTrace();
 }

 }

 public void writeXMLProperties(){
 Properties props = new Properties();
 props.setProperty("username", "test_username");
 props.setProperty("password", "test_password");
 PrintStream fw;
 try {
 long beginTime = System.currentTimeMillis();
 fw = new PrintStream(new File("testwrite.xml"));
 props.storeToXML(fw, "test");
 long endTime = System.currentTimeMillis();
 System.out.println("Write XML use time: " + (endTime - beginTime));
 } catch (IOException e) {
 e.printStackTrace();
 }
 }

 public static void main(String[] args) {
 PropertiesTest pt = new PropertiesTest();
 pt.readProperties();
 pt.readXMLProperties();
 pt.writeProperties();
 pt.writeXMLProperties();
 }

}

运行结果:

Use time: 6
com.mysql.jdbc.Driver
root
Use time: 84
com.mysql.jdbc.Driver
root
Write properties use time: 1
Write XML use time: 26

从运行的时间看来,读取.properties文件比读取.xml文件要快的多,而且.properties文件看起来更加直观。

标签: