今天在用ajax传一个中文值的时候,碰到了个怪问题,起先在js中没有对要传到后台的中文值进行编码,在java后台通过
new String(后台接收到得中文值.getBytes(),”UTF-8″)
可以正确解析到传过来的中文值,但是当我传中文值”一般”的时候,问题出现了,死活都是乱码,很奇怪,把其中”一”去掉,能够正常解析,问题出在这个”一”上,呵,以前还真没遇到过,因为时间的关系,最后对js传的中文值用
encodeURIComponent(中文值)
来传递到后台,java后台通过
java.net.URLDecoder.decode(后台接收到的经过编码的中文值,”UTF-8″);
来解析,至此一切正常,不管怎样,对js传中文到后台的时候,一律先给它编码再传,这样乱码也就不会产生了。
在websphere中修改了jsp后,有时会出现修改的jsp没有起作用,特别是改变了某jsp的样式后,在页面中没看到效果,这主要就是由于websphere中缓存的缘故,这就要清除WebSphere中jsp缓存,如我的应用部署的目录为:
E:\IBM\WebSphere\AppServer\profiles\AppSrv01\installedApps\nbxzfwNode01Cell\项目名_war.ear\项目名.war 阅读全文…
上次介绍了用java读取rtf文件格式的内容,那用java语言怎么来读取word文档以及excel中的内容,这些在编程的时候是经常会用到的,java读取word文档及Excel的内容在java的API中没有是没有现成的类或方法的,所以我们要用到一个控件——POI控件:POI控件的下载及配置
下面就是关于java读取word和Excel内容的代码: 阅读全文…
摘抄自:http://lycoder.javaeye.com/blog/451613
里面介绍得很好,POI的下载及配置,PDFBOX的下载及配置,JDOM的下载及配置都全了。
一、POI
POI是Apache的Jakata项目,POI 代表 Poor Obfuscation Implementation,即不良模糊化实现。POI 的目标就是提供一组 Java API 来使得基于 Microsoft OLE 2 Compound Document 格式的 Microsoft Office 文件易于操作。
下载地址 :http://apache.etoak.com/poi/release/bin/
相关配置 : 阅读全文…
java中读取rtf文件格式的内容有事在项目中用到,java API中有相关的类和方法用来读取rtf文件格式的内容,这样利用相关的类和方法就能获取到我们需要的内容,不需要什么插件了呵呵,下面是代码,特记录下:
package textReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.rtf.RTFEditorKit;
public class RtfReader {
public RtfReader(){
}
/**
* @param filePath 文件路径
* @return 读出的rtf的内容
*/
public String getTextFromRtf(String filePath) {
String result = null;
File file = new File(filePath);
RTFEditorKit rtf = new RTFEditorKit().
try {
DefaultStyledDocument styledDoc = new DefaultStyledDocument();
InputStream is = new FileInputStream(file);
rtf.read(is, styledDoc, 0);
result = new String(styledDoc.getText(0,styledDoc.getLength()).getBytes("ISO8859_1"));
//提取文本,读取中文需要使用ISO8859_1编码,否则会出现乱码
} catch (IOException e) {
e.printStackTrace();
} catch (BadLocationException e) {
e.printStackTrace();
}
return result;
}
}
在用cookie保存用户名的时候,发现cookie值不能存中文,报如下错:
Control character in cookie value, consider BASE64 encoding your value
错误发生在:response.addCookie(cookie);
在以前的编程中也碰到过这样的问题,主要是cookie值里面存在非法参数,如存在”\r\n”、”\n”之类的字符时就报报这样的错,但我就个用户名啊,不存在像这些字符啊,不管,我把cookie值设为一个默认的中文用户名,运行看是否出问题,果不其然,出现同样的错误,结果知道,cookie中不能保存中文。
最后想想把中文转换为UTF-8字符串进行保存应该没问题,即用 URLEncoder.encode(“中文用户名”,”UTF-8″)); 这样把中文用户名转换为UTF-8字符串,运行时通过。在最后接收这个值的时候,用URLDecoder.decode(cookies.getValue(),”UTF-8″);来解码得到我要的中文用户名。
URLEncode及URLDecode在包java.net里面。
在编程中,经常要用到创建多级目录,下面通过java来实现:
import java.io.*;
import java.util.*;
public class CreateFolders{
public static void main(String[] args) {
String path="c:/aaa/bbb/ccc";
StringTokenizer st=new StringTokenizer(path,"/");
String path1=st.nextToken()+"/";
String path2 =path1;
while(st.hasMoreTokens())
{
path1=st.nextToken()+"/";
path2+=path1;
File inbox = new File(path2);
if(!inbox.exists())
inbox.mkdir();
}
}
}
而用的最多的莫过于根据日期来创建目录进行文章的分类,如20090915用它来在E盘下创建一个E:/2009/09/17的目录而20090917又是一个字符串,须将它转化为:2009/09/17这种格式才好创建目录,下面是我实现的方法:
import java.util.*;
import java.text.*;
import java.io.*;
public class Createdirs{
public static void main(String[] args) {
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
String dateString = "20090917";
try {
Date date = df.parse(dateString);
String path="E:/"+new SimpleDateFormat("yyyy/MM/dd").format(date);
//System.out.println(DateFormat.getDateInstance().format(date));
StringTokenizer st=new StringTokenizer(path,"/");
String path1=st.nextToken()+"/";
String path2 =path1;
while(st.hasMoreTokens())
{
path1=st.nextToken()+"/";
path2+=path1;
File inbox = new File(path2);
if(!inbox.exists())
inbox.mkdir();
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
有时候,我们获取到的日期类型可能为一字符串,如20090915;输出的时候,我们想转化为: 2009年09月15日 这种日期格式,那么我们怎么来将字符串转换为日期格式,下面是转换的代码:
import java.util.*;
import java.text.*;
import java.io.*;
class StrToDate
{
public static void main(String[] args)
{
String dateString = "20090915";
try {
Date date=new SimpleDateFormat("yyyyMMdd").parse(dateString);
//下面将字符串转换为日期格式后显示的格式是2009-09-15
System.out.println(DateFormat.getDateInstance().format(date));
//如果想换一种别的格式,可以用下面的办法,得到任何的日期格式都可以
//输出的结果为2009/09/15
System.out.println(new SimpleDateFormat("yyyy/MM/dd").format(date));
//SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日");
//输出的结果为2009年09月15日
System.out.println(new SimpleDateFormat("yyyy年MM月dd日").format(date));
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
通过上例代码,就可以转换成我们想要表示的日期格式了。
从同事那得知他面试一个题目,题目为java中怎么处理比long型还大的整数?
真的没点头绪,看了网上的一些解答,都没有给出实际的解答,网上很多的表示用数组来处理这个比long型还大的整数,到底怎么来实现运算,我也不知道,呵呵,曾今看过一篇文章,银行计算金额的时候,用的是bigdecimal类型,这种类型没有位数限制,是不是我们也可以利用这个来处理比long型还大的整数,答案是可以的,下面是计算方法:
//使用BigDecimal进行加、减、乘、除
void TestBigDecimal()
{
//别忘了导入java.math.BigDecimal
BigDecimal a=new BigDecimal(new String("123453243455535634535252345234677576252241234123523453664563634"));
BigDecimal b=new BigDecimal(new String("123453243455535634535252345234677576252241234123523453664563634"));
String c=a.add(b).toString();//加
String d=a.subtract(b).toString();//减
String e=a.multiply(b).toString();//乘
String f=a.divide(b).toString();//除
System.out.println(c);
System.out.println(d);
System.out.println(e);
System.out.println(f);
}
不过从还是从网上看到了一篇用string型来处理的比long型还大的整数运算,下面是具体运算类: 阅读全文…
在java编程中,对于时间的比较总是很多的,下面列出了常用的java时间比较的方法:
import java.text.*;
import java.util.*;
public class TimeCompare{
public static void main(String[] args){
boolean flag = isDateBefore(\"2004-09-09 12:12:12\",\"2005-09-09 16:00:00\");
System.out.println(flag);
flag = isDateBefore(\"2006-09-09 01:01:01\",\"2005-09-09 16:00:00\");
System.out.println(flag);
flag = isDateBefore(\"2005-09-09 01:01:01\");
System.out.println(flag);
}
//判断时间date1是否在时间date2之前
//时间格式 2005-4-21 16:16:34
public static boolean isDateBefore(String date1,String date2){
try{
DateFormat df = DateFormat.getDateTimeInstance();
return df.parse(date1).before(df.parse(date2));
}catch(ParseException e){
System.out.print(\"[SYS] \" + e.getMessage());
return false;
}
}
//判断当前时间是否在时间date2之前
//时间格式 2005-4-21 16:16:34
public static boolean isDateBefore(String date2){
try{
Date date1 = new Date();
DateFormat df = DateFormat.getDateTimeInstance();
return date1.before(df.parse(date2));
}catch(ParseException e){
System.out.print(\"[SYS] \" + e.getMessage());
return false;
}
}
}
看到这里就知道怎么来判断比较时间格式为2005-4-21的了;下面是我仿照写的 一个静态方法,年前在工作中正好用到,呵呵!
//判断当前时间是否在时间date2之后或相等
//时间格式 2005-4-21
public static boolean isDateAfterOrEqual(String date2){
boolean flag=false;
try{
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = new Date();
if(fmt.parse(fmt.format(date1)).equals(fmt.parse(date2))||fmt.parse(fmt.format(date1)).after(fmt.parse(date2)))
flag=true;
}catch(ParseException e){
System.out.print("[SYS] " + e.getMessage());
flag = false;
}
return flag;
}
Recent Comments