记录一些自己写项目常用的代码段。

当积累的相同类型的代码多于某一个程度的时候就会集合成一篇汇总。

使用工具包,设置窗口在屏幕的正中间

Toolkit kit = Toolkit.getDefaultToolkit();      
Dimension screenSize = kit.getScreenSize();  
width = screenSize.width/2-this.getWidth()/2;  
height = screenSize.height/2-this.getHeight()/2;  
this.setLocation(width,height);  
//注意要放在PACK()或者SETSIZE()之后  

BAT文件设置开机启动

@echo off  
echo 请确认杀毒软件的放行  
echo .  
reg add "HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionrun" /v 电信拨号工具 /t reg_sz /d "%cd%电信拨号工具.exe" /f  
echo .  
pause  

在我们写java程序的时候,不可避免地会需要获取当前文件或者是当前程序的的绝对路径

比较常用的方法有:

1 普通环境下 在任意的class里调用:

//获取绝对路径 
this.getClass().getClassLoader().getResource("/").getPath(); 
这个方法也可以不在web环境里确定路径,比较好用 2 WEB环境下 在servlet的init方法里
String path = getServletContext().getRealPath("/");  
//这将获取web项目的全路径  
//例如 :E:eclipseM9workspacetree  
//tree是我web项目的根目录  

3.获得web根的上下文环境

request.getContextPath();  
//如 /tree 是我的web项目的root context  
/*jsp 取得当前目录的路径*/  
path=request.getRealPath("");  
/*得到jbossWEB发布临时目录 warUrl=.../tmp/deploy/tmp14544test-exp.war/*/  
path=C:jboss-4.0.5.GAserverdefaulttmpdeploytmp14544test-exp.war  
String   path   =   (String)request.getContextPath();  
/*得到项目(test)应用所在的真实的路径 path=/test*/   
String     path     =   request.getRequestURI();  
/*得到应用所在的真实的路径 path=/test/admin/admindex.jsp*/  
String   savePath=request.getRealPath(request.getServletPath());  
/*得到当前文件的磁盘绝对路径*/    
//JAVA 取得当前目录的路径  
File   file=new   File(".");     
String path=file.getAbsolutePath();  
                path=file.getPath();  
/*得到jboss运行目录 path=C:jboss-4.0.5.GAbin*/  

4.获取jar包源路径/java文件源路径,支持中文目录!

import java.io.IOException;  
import java.io.UnsupportedEncodingException;  
import java.net.URLDecoder;  
import javax.swing.JFrame;  
@SuppressWarnings("serial")  
public class Ini extends JFrame{  
    private static String LOCATION;  
    static {  
        try {  
            LOCATION = URLDecoder.decode(Ini.class.getProtectionDomain().getCodeSource().getLocation().getFile(),"UTF-8");  
        } catch (UnsupportedEncodingException e) {  
            LOCATION = "";  
        }  
    }  
    public static void main(String[] args) throws IOException {  
        System.out.println(LOCATION);  
    }  
}  

一、Statement类

可用于执行SQL语句,不同类型的SQL语句,需要使用不同的方法,执行结果存放于ResultSet
具体如下:

ResultSet  executeQuery(String sql)
//用于执行select语句,返回结果集
int executeUpdate(String sql)
//用于执行insert、delete和update语句,返回int
boolean execute(String sql)
//用于执行create和drop等语句,返回boolean

 

二、ResultSet类

1.next()方法

表示select语句的查询结果集。ResultSet对象具有指向其当前数据行的指针,最初,指针被置于第一行记录之前,通过next()方法可以将指针移动到下一行记录。
next()方法在ResultSet对象没有一行记录时返回false,因此可以在while循环中使用它来遍历结果集,也可以利用该方法判断结果集是否为空。
示例代码如下:

 

//此处省略连接数据库的代码…
Statement stmt =conn.createStatement();
ResultSet rs =stmr.executeQuery(“select * from Test”);
if(rs.next()){
System.out.println(“结果集不为空!”);
}
else{
System.out.println(“结果集为空!”);
}

 

2.ResultSet指针

Java的ResultSet对象,默认是不可更新的,仅有一个向前移动的指针,因此,只能遍历它一次,并且只能按从第一行到最后一行的顺序进行。

如果需要ResultSet指针具有移动和可更新的特性,可以在使用createStatement()方法获取Statement对象时指定一些参数。

 

//实例,获取ResultSet中含有的记录数量。

在已获取ResultSet结果集的情况下,可以使用该对象的last()和getRow()方法取得记录数量。

 

last()方法用于将指针指向最后一行记录。

getRow()方法用于返回当前指针所在的位置。

 

ResultSet默认情况下,只能使用next()方法向前逐行移动指针,不支持last()、first()、
以及absolute()等方法,如果要使用last()、absolute()等方法,必须在由Connection生成
Statement时指定相应的参数,格式如下:

Statement stmt =conn.ctrateStatement(游标类型,记录更新权限);

 

3.createStatement()的参数

游标类型参数有以下几种:

ResultSet.TYPE_FORWORD_ONLY
//指针只可以向前移动
ResultSet.TYPE_SCORLL_INSENSITIVE
//指针可滚动,但是不受其他用户
//对数据库更改的影响
ResultSet.TYPE_SCORLL_SENSITIVE
//指针可滚动,当其它用户更改数据
//库时这个记录也会改变
//记录更新权限有以下几种:

ResultSet.CONCUR_READ_ONLY//只读
ResultSet.CONCUR_UPDATABLE//可更新
createStatement()
//缺省参数等价于:
 

4.获取ResultSet记录数量

代码如下:
//此处省略连接数据库的代码和变量的定义!…

Statement stmt =conn.createStatement(ResultSet.TYPE_SCOLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);

ResultSet rs =stmt.executeQuery(“select * from Test”);

if(rs.last()){
count =rs.getRow();//返回当前指针所在的位置
}

System.out.println(“记录数量为:”+count);
 

注:使用上述方法查询记录数量,在数据量很大时会出现内存溢出异常,因此不推荐使用。
要以使用SQL统计函数获取符合查询条件的记录数量,示例代码如下:

 

 

//此处省略连接数据库的代码和变量的定义!…  

//注:此处假设数据库中第一列数据类型为:自动编号
Statement stmt =conn.createStatement();
ResultSet rs =stmt.executeQuery(“select * from Test”);
if(rs.next()){
count =rs.getInt(1);

}
System.out.println(“记录数量为:”+count);

//或者使用 select count(*) from Test group by id 之类的查询语句
 

 

使用JAVA5提供的枚举类型 - 抽象函数让子类去覆盖抽象方法 - 实现特定的功能。

/**
 * 使用JAVA5提供的枚举类型 - 抽象函数
 * 让子类去覆盖抽象方法 - 实现Next()的功能
 * @author qsuron - 博客:http://blog.csdn.net/qsuron
 */
public class Java5 {
    public static void main(String[] args) {
        Week w = Week.MON;
        System.out.println(w.next());
    }
    public enum Week{
        //由于麻烦,只写2个星期数
        MON{
            public Week next(){
                return TUE;
            }
        },
        TUE{
            public Week next(){
                return MON;
            }
        };
        public abstract Week next();
    }
}

序列化在很多地方都会用到,可以传输对象。下面是一个简单的本地存储的序列化例子。
代码:


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class SerializableDemo {
public static void main(String[] args) throws Exception{
new Bak(“11231231”,”as5d45asd”,1,0).backup();
Bak bak = Bak.recover();

    System.out.println(bak.account);
    System.out.println(bak.password);
    System.out.println(bak.remPassword);
    System.out.println(bak.autoLogin);
}

}

class Bak implements Serializable {
/**

 * 
 */
private static final long serialVersionUID = 1L;
public String account;
public String password;
public int remPassword;
public int autoLogin;
Bak(String account,String password,int remPassword,int autoLogin) {
    this.account = account;
    this.password = password;
    this.remPassword = remPassword;
    this.autoLogin = autoLogin;
}
public void backup () throws Exception{
    File file = new File("C:"+File.separator+"WINDOWS"+File.separator+"qsuron.bak");
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
    oos.writeObject(this);
    oos.close();
}
public static Bak recover () throws Exception{
    File file = new File("C:"+File.separator+"WINDOWS"+File.separator+"qsuron.bak");
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
    Bak bak = (Bak)ois.readObject();
    ois.close();
    return bak;
}

}


例子输出:


11231231

as5d45asd

1

0

主要是使用untime.getRuntime().exec()来执行命令,但是可能会被杀毒软件拦截,慎用。


import java.io.*;

public class PingDemo {
public static void main(String args[])
{
new MyThread().start();
}
}

class MyThread extends Thread{
public void run() {
String line = null;
try{
Process pro = Runtime.getRuntime().exec(“ping -l 65500 -t 192.168.178.37”);
BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));
while((line = buf.readLine()) != null)
System.out.println(line);
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
}

不用多说,对于某一些特殊的地方,需要用到特殊的时间格式,如最常见的2014-01-20 23:00:44’589,直接上源代码:

拼凑


import java.util.Calendar;
import java.util.GregorianCalendar;

public class GetDateDemo {
    public static String getDate(){

        StringBuffer buf = new StringBuffer();

        Calendar calendar = new GregorianCalendar();

        buf = buf.append(calendar.get(Calendar.YEAR)).append("-")
                .append(AddZero((calendar.get(Calendar.MONTH)+1),2)).append("-")
                .append(AddZero(calendar.get(Calendar.DAY_OF_MONTH),2)).append(" ")
                .append(AddZero(calendar.get(Calendar.HOUR_OF_DAY),2)).append(":")
                .append(AddZero(calendar.get(Calendar.MINUTE),2)).append(":")
                .append(AddZero(calendar.get(Calendar.SECOND),2)).append("'")
                .append(AddZero(calendar.get(Calendar.MILLISECOND),3));
        return buf.toString();

    }

    private static String AddZero(int num,int len) {
        StringBuffer buf = new StringBuffer();
        buf.append(num);
        while(buf.length()<;len){ buf.insert(0,"0");="" }="" return="" buf.tostring();="" public="" static="" void="" main(string[]="" args){="" system.out.println(getdatedemo.getdate());="" 获取当前时间="" <="" pre="">

格式化

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateChangeDemo {
    public static void main(String[] args) throws ParseException {
        String arg = "2008-08-08 08:08:08.088";
        Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SS").parse(arg);
        System.out.println(date);
        String s = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒SS毫秒").format(date);
        System.out.println(s);
    }
}

在java swing中,做页面的绘制的时候,如果不进行缓冲处理,难免会出现闪烁的情况,而下面则是最简单的一种缓冲的方法,可以略微改善闪烁的程度:

首先,class 必须 extends JFrame


然后在刷新类中定义:public Image offScreenImage = null;


刷新部分的代码如下:

@Override
public void update(Graphics g) {
    if(offScreenImage==null){
        offScreenImage = this.createImage(ROWS * CHECK_SIZE + BLANK * 2, COLS * CHECK_SIZE + BLANK * 2);
    }
    Graphics goff = offScreenImage.getGraphics();
    paint(goff);
    g.drawImage(offScreenImage,0,0,null);
}

使用java swing来模拟游戏中横版卷轴界面的效果

------------------------------------------------------------------
GameRibbonPanel类
------------------------------------------------------------------
package com.qsuron;

import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

public class GameRibbonPanel extends JFrame implements Runnable, KeyListener{

    private static final long serialVersionUID = 2655407680852591409L;
    public static final int WIDTH = 300;
    public static final int HEIGHT = 240;

    private Container contentPanel;
    public Image offScreenImage = null;                    //缓冲图像
    public Ribbon ribbon = null;

    //界面初始化
    private void jframeInit(){
        this.setTitle("Swing 游戏学习2 - 卷轴");
        this.setSize(WIDTH+200,HEIGHT+200);
        this.setLocation(400,200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        contentPanel = this.getContentPane();
        contentPanel.setLayout(null);
        this.setVisible(true);
        this.addKeyListener(this);

        BufferedImage bim = new BufferedImage(1110,240,BufferedImage.TYPE_INT_ARGB);
        try {
            bim = ImageIO.read(getClass().getResource("MyPhoto.jpg"));
        } catch (IOException e) {e.printStackTrace();}
        ribbon = new Ribbon(1,bim);

        Thread gameThread = new Thread(this);
        gameThread.start();
    }

    public static void main(String[] args){
        GameRibbonPanel grp = new GameRibbonPanel();
        grp.jframeInit();
    }

    @Override
    public void run() {
        while(true){
            ribbon.update();
            ribbon.drawRibbon(this.getGraphics());
            try {
                Thread.sleep(5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void update(Graphics g) {
        if(offScreenImage==null){
            offScreenImage = this.createImage(WIDTH,HEIGHT);
        }
        Graphics goff = offScreenImage.getGraphics();
        paint(goff);
        g.drawImage(offScreenImage,0,0,null);
    }

    @Override
    public void keyTyped(KeyEvent e) {

    }

    @Override
    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode()==KeyEvent.VK_RIGHT){
            ribbon.setCanMoveLeft(true);
        }else if(e.getKeyCode()==KeyEvent.VK_LEFT){
            ribbon.setCanMoveRight(true);
        }else if(e.getKeyCode()==KeyEvent.VK_UP){
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
        ribbon.setCanMoveLeft(false);
        ribbon.setCanMoveRight(false);
    }

}

------------------------------------------------------------------
Ribbon类
------------------------------------------------------------------
package com.qsuron;

import java.awt.Graphics;
import java.awt.image.BufferedImage;

public class Ribbon {
    public BufferedImage bim;
    private int xImHead;        //图像X指针
    private int pWidth;            //窗口宽度
    private int pHeight;        //窗口高度
    private int width = 1110;    //图像宽度
    private int moveSize;
    private boolean canMoveLeft;
    private boolean canMoveRight;

    public Ribbon(int moveSize,BufferedImage bim){
        this.bim = bim;
        xImHead = 0;
        pWidth = GameRibbonPanel.WIDTH;
        pHeight = GameRibbonPanel.HEIGHT;
        this.moveSize = moveSize;
        canMoveRight = false;
        canMoveLeft = false;
    }

    public void drawRibbon(Graphics g){
        if(xImHead == 0){
            drawRibbon(g,bim,0,pWidth,0,pWidth);
        }else if(xImHead > 0 && xImHead < pWidth){
            drawRibbon(g, bim, 0, xImHead, pWidth - xImHead, width);
            drawRibbon(g, bim, xImHead, pWidth, 0, pWidth - xImHead);
        }else if(xImHead >= pWidth){
            drawRibbon(g, bim, 0, pWidth, width - xImHead, width - xImHead + pWidth);
        }else if(xImHead < pWidth - width){
            drawRibbon(g, bim, 0, width + xImHead, - xImHead, pWidth);
            drawRibbon(g, bim, width + xImHead, pWidth, 0, pWidth - width - xImHead);
        }else if(xImHead < 0 && xImHead >= pWidth - width){
            drawRibbon(g, bim, 0, pWidth, -xImHead, pWidth - xImHead);
        }
    }

    public void drawRibbon(Graphics g,BufferedImage bim,int dx1,int dx2,int sx1,int sx2){
        g.drawImage(bim, dx1+100, 0 + 100, dx2+100, pHeight + 100, sx1, 0, sx2, pHeight, null);
    }

    public void update(){
        if(canMoveLeft){
            xImHead = (xImHead - moveSize) % width;
        }else if(canMoveRight){
            xImHead = (xImHead + moveSize) % width;
        }
    }

    public void setCanMoveLeft(boolean canMoveLeft) {
        this.canMoveLeft = canMoveLeft;
    }

    public void setCanMoveRight(boolean canMoveRight) {
        this.canMoveRight = canMoveRight;
    }
}

使用java swing来模拟游戏中方格地图的效果

MainJFrame类

package com.qsuron.map;

import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

import com.qsuron.Ribbon;

public class MainJFrame extends JFrame implements Runnable{

private static final long serialVersionUID = 5753479529328043063L;
private static final int FPS = 1000;                    //FPS
private static final int FRAME_X = 860;                //窗口宽度
private static final int FRAME_Y = 370;                //窗口高度
private static final int PIC_SIZE = 71;                //地图格子大小
private long t1, t2, dt, sleepTime;                    //画面刷新FPS计时用
private long period = 1000 / FPS;                    //画面刷新FPS计时用

public Ribbon ribbon = null;
private Container contentPanel;
private BufferedImage[] bim = {null,null,null,null,null,null,null,null,null,null};
public Image offScreenImage = null;                    //缓冲图像
private int[][] arr = {
        {0,0,7,8,8,9,0,0,0,0,0,0},
        {0,0,1,2,2,3,0,0,0,0,0,0},
        {0,0,0,0,0,0,0,0,0,0,0,0},
        {9,0,0,0,0,0,0,0,7,8,8,9},
        {5,8,9,0,0,7,8,8,5,5,5,6},
};
private static final int PIC_X = 12;
private static final int PIC_Y = 5;

//界面初始化
private void jframeInit(){
    this.setTitle("Swing 游戏学习1");
    this.setSize(FRAME_X,FRAME_Y);
    this.setLocation(200,100);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    contentPanel = this.getContentPane();
    contentPanel.setLayout(null);
    this.setVisible(true);
    this.gameInit();
    Thread gameThread = new Thread(this);
    gameThread.start();
}

//游戏初始化
private void gameInit() {
    try {
        for(int i=1;i<10;i++){
            bim[i] = new BufferedImage(PIC_SIZE,PIC_SIZE,BufferedImage.TYPE_INT_BGR);
            bim[i] = ImageIO.read(getClass().getResource(i+".png"));
        }
    } catch (IOException e) {e.printStackTrace();}

}

//游戏进程更新
private void gameUpdate() {
}

//游戏界面刷新
@Override
public void run() {
    t1 = System.nanoTime();
    while(true){
        gameUpdate();
        repaint();
        t2 = System.nanoTime();
        dt = (t2 - t1) / 1000000L;
        sleepTime = period - dt;
        if(sleepTime <= 0){
            sleepTime = 2;
        }
        try {
            Thread.sleep(sleepTime);
        } catch (InterruptedException e) {e.printStackTrace();}
        t1 = System.nanoTime();
    }
}

public static void main(String[] args){
    MainJFrame mjf = new MainJFrame();
    mjf.jframeInit();
}

@Override
public void paint(Graphics g) {
    Color c = g.getColor();
    for(int i=0;i<_PIC_Y;i++){
        for(int j=0;j<_PIC_X;j++){
            int num = arr[i][j];
            //System.out.print(num+"|");
            if(num==0 || bim[num]==null){
                continue;
            }
            g.drawImage(bim[num], j*PIC_SIZE, i*PIC_SIZE, (j+1)*PIC_SIZE, (i+1)*PIC_SIZE, 0, 0, PIC_SIZE, PIC_SIZE, null);
        }
        //System.out.println("");
    }
    g.setColor(c);
}

@Override
public void update(Graphics g) {
    if(offScreenImage==null){
        offScreenImage = this.createImage(FRAME_X,FRAME_Y);
    }
    Graphics goff = offScreenImage.getGraphics();
    paint(goff);
    g.drawImage(offScreenImage,0,0,null);
}

}