顯示具有 JAVA 標籤的文章。 顯示所有文章
顯示具有 JAVA 標籤的文章。 顯示所有文章

2016年9月21日 星期三

How to create file and directory in Java.

String filePath = "logs/test.log";
File file = new File(filePath);
此時如果直接createNewFile()
if(!file.exists())
{
 try {
  file.createNewFile();
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
}
會因為parent的資料夾不存在而失敗,而這時直接使用mkdirs()

if(!file.exists())
{
 file.mkdirs();
 try {
  file.createNewFile();
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
}
但這樣會把01.log也當成資料夾建立,就無法createNewFile,所以應該先切換到上層目錄再進行mkdirs()
if(!file.exists())
{
 file.getParentFile().mkdirs();
 try {
  file.createNewFile();
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
}

2013年1月8日 星期二

星期英文转中文解决方法

Java code
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
import java.util.Date;

public class WeekShow {

    public static void main(String[] args) {
        DateFormat df=new SimpleDateFormat("EE");
        df.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
        Date d=new Date();//这里改成你从数据库获得的时间构造一个Date
        String s=df.format(d);
        System.out.println("output:"+s);
    }
}

JAVA将英文格式的日期字符串转换为时间

JAVA将英文格式的日期字符串转换为时间

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class test {
 public static void main(String[] args) throws ParseException {
  String temp = "Thu,1Dec201111:16:25GMT";
  SimpleDateFormat sdf = new SimpleDateFormat("EEE,dMMMyyyyHH:mm:ssz",Locale.US);  Date d=sdf.parse(temp);
  long longTime=d.getTime()-8*60*60*1000;
  Date d2=new Date(longTime);
  System.out.println(d2);
 
 }
}

主要是设置Locale,可以点一下看看都有哪些值。
G  Era 标志符  Text  AD 
y  年  Year  1996; 96 
M  年中的月份  Month  July; Jul; 07 
w  年中的周数  Number  27 
W  月份中的周数  Number  2 
D  年中的天数  Number  189 
d  月份中的天数  Number  10 
F  月份中的星期  Number  2 
E  星期中的天数  Text  Tuesday; Tue 
a  Am/pm 标记  Text  PM 
H  一天中的小时数(0-23)  Number  0 
k  一天中的小时数(1-24)  Number  24 
K  am/pm 中的小时数(0-11)  Number  0 
h  am/pm 中的小时数(1-12)  Number  12 
m  小时中的分钟数  Number  30 
s  分钟中的秒数  Number  55 
S  毫秒数  Number  978 
z  时区  General time zone  Pacific Standard Time; PST; GMT-08:00 
Z  时区  RFC 822 time zone  -0800 

英文月份和数字月份转换

public static List<String> MONTH_LIST = Arrays.asList("JAN", "FEB", "MAR",
   "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC");

public static String changeNumberToChar(String releaseVersion) {
  if (null == releaseVersion) {
   throw new IllegalArgumentException("ReleaseVersion cannot be null");
  }
  String strNumber = releaseVersion.substring(0, 2);
  String strMonth = null;
  try {
   strMonth = MONTH_LIST.get(Integer.parseInt(strNumber));
  } catch (NumberFormatException e) {
   e.printStackTrace();
   System.out.println("Parse month error........");
  }
  return strMonth + releaseVersion.substring(2);
 }
 public static String changeStringToNumber(String releaseVersion) {
  if (null == releaseVersion) {
   throw new IllegalArgumentException("ReleaseVersion cannot be null");
  }
  for (int i = 0; i < MONTH_LIST.size(); i++) {
   if (releaseVersion.toUpperCase().startsWith(MONTH_LIST.get(i))) {
    if (i < 10) {
     return "0" + i;
    }
    return i + "";
   }
  }
  return -1 + "";
 }

[java] Java Simple Date Format 速查表(for SimpleDateFormat)

Letter Date or Time Component Presentation Examples
G Era designator Text AD
yyyy,yy *Year Year 1996; 96
MMMM;MMM;MM;M *Month in year Month July; Jul; 07;7
w Week in year Number 27
W Week in month Number 2
D Day in year Number 189
dd;d *Day in month Number 05;5
F Day of week in month Number 2
EEEE;EEE;E Day in week Text Tuesday; Tue; 2
a Am/pm marker Text PM
HH;H *Hour in day (0-23) Number 02;2
kk;k Hour in day (1-24) Number 24
K Hour in am/pm (0-11) Number 0
h Hour in am/pm (1-12) Number 12
mm;m *Minute in hour Number 08;8
ss;s *Second in minute Number 05;5
S Millisecond Number 978
z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
Z Time zone RFC 822 time zone -0800


Ex : 2001-07-04 12:08:56
Date and Time Pattern Result
"yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT
"EEE, MMM d, ''yy" Wed, Jul 4, '01
"h:mm a" 12:08 PM
"hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
"K:mm a, z" 0:08 PM, PDT
"yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM
"EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ" 010704120856-0700


http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

2012年6月24日 星期日

AES算法 JAVA同C++互解(AES) .

關於加解密JAVA一般使用的JCE,關於C++可以實現AES加解密的開源項目就多的數不勝數的。
理論上上算法一樣,對稱密鑰一樣就能夠互相識別了。
相信很多人開始想法都同我一樣,起初我JAVA用JCE,C++使用openssl。
結果發現加密出的密文完全不相同。
出現問題就要解決
了解了一下JCE:

      
JCE中AES支持五中模式:CBC,CFB,ECB,OFB,PCBC;支持三種填充:NoPadding,PKCS5Padding,ISO10126Padding。不支持SSL3Padding。不支持“NONE”模式。
好原來有模式和填充一說。
在OPENSSL中直接有一個CBC加解密函數。填充沒找到,試過後發現C++加密出的內容比JAVA的要長出一截,前面的內容是完全一樣的。
這應該就出現在填充上。

      
本來以為找到問題關鍵就應該很容易解決的。結果發現OPENSSL的填充是固定實現的,而我所需要解密的java端代碼不能改動。

      
一條路走不通咱就換條路。最後發現有一個開源項目Botan什麼都有而且同JCE十分相似並且滿足我要求垮平台,好就是它了。




附:

算法/模式/填充16字節加密後數據長度不滿16字節加密後長度AES/CBC/NoPadding 16 不支持AES/CBC/PKCS5Padding 32 16AES/CBC/ISO10126Padding 32 16AES/CFB/NoPadding 16 原始數據長度AES/CFB/PKCS5Padding 32 16AES/CFB/ISO10126Padding 32 16AES/ECB/NoPadding 16 不支持AES/ECB/PKCS5Padding 32 16AES/ECB/ISO10126Padding 32 16AES/OFB/NoPadding 16 原始數據長度AES/OFB/PKCS5Padding 32 16AES/OFB/ISO10126Padding 32 16AES/PCBC/NoPadding 16 不支持AES/PCBC/PKCS5Padding 32 16AES/PCBC/ISO10126Padding 32 16可以看到,在原始數據長度為16的整數倍時,假如原始數據長度等於16*n,則使用NoPadding時加密後數據長度等於16*n,其它情況下加密數據長度等於16*(n+1 )。在不足16的整數倍的情況下,假如原始數據長度等於16*n+m[其中m小於16],除了NoPadding填充之外的任何方式,加密數據長度都等於16*(n+1); NoPadding填充情況下,CBC、ECB和PCBC三種模式是不支持的,CFB、OFB兩種模式下則加密數據長度等於原始數據長度。

2012年3月1日 星期四

Java - Hex String & Byte Array 轉換

public String toHexString(byte[] in){
BigInteger temp = new BigInteger(in);
return temp.toString(16);
}
 
 
 
public byte[] fromHexString(String in){
BigInteger temp = new BigInteger(in, 16);
return temp.toByteArray();
}
 
 

Java - String與基本資料型態之間的轉換

String 類別中已經提供了將基本資料型態轉換成 String 的 static 方法
也就是 String.valueOf() 這個參數多載的方法。

有下列幾種:
String.valueOf(boolean b) : 將 boolean 變數 b 轉換成字串
String.valueOf(char c) : 將 char 變數 c 轉換成字串
String.valueOf(char[] data) : 將 char 陣列 data 轉換成字串
String.valueOf(char[] data, int offset, int count) :

將 char 陣列 data 中 由 data[offset] 開始取 count 個元素 轉換成字串
String.valueOf(double d) : 將 double 變數 d 轉換成字串
String.valueOf(float f) : 將 float 變數 f 轉換成字串
String.valueOf(int i) : 將 int 變數 i 轉換成字串
String.valueOf(long l) : 將 long 變數 l 轉換成字串
String.valueOf(Object obj) : 將 obj 物件轉換成 字串, 等於 obj.toString()

用法就如:

int i = 10;
String str = String.valueOf(i);
這時候 str 的值"10"

2. String 轉換成 數字 的基本資料型態

要將 String 轉換成基本資料型態轉
大多需要使用基本資料型態的包裝類別

String 轉換成 byte
可以使用 Byte.parseByte(String s)
這類的方法如果無法將 s 分析 則會丟出 NumberFormatException

byte :
Byte.parseByte(String s) : 將 s 轉換成 byte
Byte.parseByte(String s, int radix) : 以 radix 為基底 將 s 轉換為 byte
比如說 Byte.parseByte("11", 16) 會得到 17

double :
Double.parseDouble(String s) : 將 s 轉換成 double

float :
Double.parseFloat(String s) : 將 s 轉換成 float

int :
Integer.parseInt(String s) : 將 s 轉換成 int

long :
Long.parseLong(String s) : 將 s 轉換成 long

用法如:
try
{
String str = "1234"; int a = Integer.parseInt(str);
}
catch (NumberFormatException e)
{
System.out.println(" parse int error!! " + e);
}

Java - Hex String & Byte Array 轉換

public String toHexString(byte[] in){
BigInteger temp = new BigInteger(in);
return temp.toString(16);
}
 
 
public byte[] fromHexString(String in){
BigInteger temp = new BigInteger(in, 16);
return temp.toByteArray();
}

2011年12月29日 星期四

Java socket server for flash

package sban.socketServer;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.URL;
/**
 * sban policy server for flex/flash socket
 *
 * @author sban
 *
 */
public class SbanSocketPolicyServer {
 public SbanSocketPolicyServer() {
 }
 public static String readFileAsString(String url)
   throws java.io.IOException {
  byte[] buffer = new byte[(int) new File(url).length()];
  BufferedInputStream f = new BufferedInputStream(
    new FileInputStream(url));
  f.read(buffer);
  f.close();
  return new String(buffer);
 }
 public static void main(String[] args) throws IOException {
  ServerSocket server = new ServerSocket();
  SocketAddress endpoint = new InetSocketAddress("127.0.0.1", 843);
  server.bind(endpoint);
  String path = SbanSocketPolicyServer.class.getResource( "crossdomain.xml" ).getPath();
  System.out.println(path);
  String policy = readFileAsString( path );
  while (true) {
   System.out.println("wait for client...");
   Socket socket = server.accept();
   BufferedReader in = new BufferedReader(new InputStreamReader(
     socket.getInputStream()));
   PrintWriter out = new PrintWriter(socket.getOutputStream());
   String s = in.readLine();
   System.out.println(s);
   if (s.indexOf("policy-file-request") > -1) {
    out.print(policy + '\0');
    out.flush();
    in.close();
    out.close();
    System.out.println("sended policy context.");
    socket.close();
   }
  }
 }
}


crossdomain.xml文件

<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="*" to-ports="*" />
</cross-domain-policy>

Java int to String(整數轉字串)

Java int to String(整數轉字串)
  1. String stringValue = Integer.toString(12345);
  2. String stringValue = String.valueOf(12345);
  3. String stringValue = new String(""+12345);
 
 
Java string to int(字串轉整數)
  1. int intValue = Integer.valueOf("12345");
  2. int intValue = Integer.parseInt("12345");