存档
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 " [...]
上周写了个调试工具,功能很简单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 [...]
平时做项目经常需要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 [...]
毕设中要连接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″,需要在读取的时候转换,比较麻烦。
一个工程项目通常需要将相关的属性配置到.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 [...]
NIO即new io.主要是采用通道机制来提高文件读取速度。以下为一个简单的读取文本文
件的例子:
public String readTxtFile(String path) throws IOException {
long start = System.currentTimeMillis();
//设置缓冲区的大小
final int BUFFER_SIZE = 0×900000;
String content = "";
// 创建一个文件输入流
FileInputStream fis = new FileInputStream(path);
// 获得该输入流的通道
FileChannel fc = fis.getChannel();
// 创建一个字节缓冲区
ByteBuffer bb = ByteBuffer.allocate(BUFFER_SIZE);
// 将字节序列从此通道读入给定的缓冲区
fc.read(bb);
// 反转此缓冲区。首先将限制设置为当前位置,然后将位置设置为 0
bb.flip();
// 获得缓冲区中剩余元素数,并创建相应的字节数组
byte[] bytes = new byte[bb.remaining()];
[...]
Java的String类有个方法叫trim(),说是去除字符串中的空格用的,其实这样的表述并不正确,正确的表述应该是去除字符串首尾的ASCII码小于等于空格的字符,对于字符串中的空格并没有效果。有点纠结,不过看一下trim()的实现代码就明白了。
public String trim() {
int len = count;
int st = 0;
int off = offset; /* avoid getfield opcode */
char[] val = value; /* avoid getfield opcode */
while ((st < len) && (val[off + st] <= ‘ ‘)) {
st++;
}
while ((st < len) && (val[off + len - 1] <= [...]
对于java的日志工具,以前一直只用过log4j,只听说过commons-logging。这两天在研究周导写的代码,发现工程中不仅用了log4j,还用上了commons-logging。觉得很奇怪,一个工程干嘛要用两个日志工具?
原来,Apache为了让众多的日志工具有一个相同操作方式,还实现做了一个通用日志工具包commons-logging。commons-logging是为那些需要建立在不同环境下使用不同日志架构的组件或库的开发者创建的,其中包括 Apache Log4j以及Java log的日志架构。commons-logging在运行时会自行决定使用哪种日志架构,如果发现classpath中是否有Log4j的包,则自动使用Log4j作为日志实现类,如果其他的日志工具一个也没有,则使用commons-logging自己提供的一个简单的日志实现类SimpleLog。
写了个小小的测试代码,发现commos-logging真的很强大。
package com.ooobj.log;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class LogTest {
private static Log log = LogFactory.getLog(LogTest.class);
public void test() {
log.debug("111");
log.info("222");
log.warn("333");
log.error("444");
log.fatal("555");
}
public static void main(String[] args) {
LogTest logTest = new LogTest();
logTest.test();
}
}
classpath中无log4j包的输出:
2010-4-8 14:12:37 com.ooobj.log.LogTest test
信息: 222
2010-4-8 14:12:37 com.ooobj.log.LogTest test
警告: 333
2010-4-8 14:12:37 com.ooobj.log.LogTest test
严重: 444
2010-4-8 14:12:37 com.ooobj.log.LogTest test
严重: 555
classpath中放入log4j包的输出:
[main] [...]
Maven 是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model), 一组标准集合, 一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
Maven的下载地址: http://maven.apache.org/download.html
下载后解压到你想要安装的位置,这里假设是D:\Java\apache-maven-2.2.1。在环境变量中添加一个M2_HOME变量,值为D:\Java\apache-maven-2.2.1。在PATH变量中加入%M2_HOME%\bin即可。
打开命令行,输入 mvn -v,将能看到Maven的版本信息:
>mvn -v
Apache Maven 2.2.1 (r801777; 2009-08-07 03:16:01+0800)
Java version: 1.6.0_14
Java home: D:\Java\jdk1.6.0_14\jre
Default locale: zh_CN, platform encoding: GBK
OS name: “windows 7″ version: “6.1″ arch: “x86″ Family: “windows”
安装完成!
最新评论