需要首先申请自己的开发者id和证书,我申请的是通用翻译,可以参考这个申请百度翻译
直接上代码
**
* 百度翻译引擎java示例代码
*/
public class BaiduTranslateDemo{
private static final String UTF8 = "utf-8";
//申请者开发者id,实际使用时请修改成开发者自己的appid
private static final String appId = "自己的appid";
//申请成功后的证书token,实际使用时请修改成开发者自己的token
private static final String token = "自己的token";
private static final String url = "http://api.fanyi.baidu.com/api/trans/vip/translate";
//随机数,用于生成md5值,开发者使用时请激活下边第四行代码
private static final Random random = new Random();
public String translate(String q, String from, String to) throws Exception{
//用于md5加密
int salt = random.nextInt(10000);
// 对appId+源文+随机数+token计算md5值
StringBuilder md5String = new StringBuilder();
md5String.append(appId).append(q).append(salt).append(token);
String md5 = DigestUtils.md5Hex(md5String.toString());
//使用Post方式,组装参数
HttpPost httpost = new HttpPost(url);
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("q", q));
nvps.add(new BasicNameValuePair("from", from));
nvps.add(new BasicNameValuePair("to", to));
nvps.add(new BasicNameValuePair("appid", appId));
nvps.add(new BasicNameValuePair("salt", String.valueOf(salt)));
nvps.add(new BasicNameValuePair("sign", md5));
httpost.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8));
//创建httpclient链接,并执行
CloseableHttpClient httpclient = HttpClients.createDefault();
CloseableHttpResponse response = httpclient.execute(httpost);
//对于返回实体进行解析
HttpEntity entity = response.getEntity();
InputStream returnStream = entity.getContent();
BufferedReader reader = new BufferedReader(
new InputStreamReader(returnStream, UTF8));
StringBuilder result = new StringBuilder();
String str = null;
while ((str = reader.readLine()) != null) {
result.append(str).append("\n");
}
System.out.println(result.toString());
//转化为json对象,注:Json解析的jar包可选其它
JSONObject resultJson = new JSONObject(result.toString());
//开发者自行处理错误,本示例失败返回为null
try {
String error_code = resultJson.getString("error_code");
if (error_code != null) {
System.out.println("出错代码:" + error_code);
System.out.println("出错信息:" + resultJson.getString("error_msg"));
return null;
}
} catch (Exception e) {}
//获取返回翻译结果
JSONArray array = (JSONArray) resultJson.get("trans_result");
JSONObject dst = (JSONObject) array.get(0);
String text = dst.getString("dst");
text = URLDecoder.decode(text, UTF8);
return text;
}
/**
* 实际抛出异常由开发者自己处理 中文翻译英文
* @param q
* @return
* @throws Exception
*/
public String translateZhToEn(String q) throws Exception{
String result = null;
try {
result = translate(q, "zh", "en");
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 实际抛出异常由开发者自己处理 英文翻译中文
* @param q
* @return
* @throws Exception
*/
public String translateEnToZh(String q) throws Exception{
String result = null;
try {
result = this.translate(q, "en", "zh");
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
BaiduTranslateDemo baiduTranslateDemo = new BaiduTranslateDemo();
String result="";
long start=System.currentTimeMillis();
try {
result=baiduTranslateDemo.translateZhToEn("开放地摊经济,本来初衷是为了帮助一些小型个体户和店家。但是不料这几天网络的发酵,让摆地摊成为一种全民的狂欢,最近有网友在街上,看到很多上市公司的CEO,都出来摆地摊卖自家的产品了。");
} catch (Exception e) {
e.printStackTrace();
}
long end=System.currentTimeMillis();
System.out.println("耗时:"+(end-start)/1000+"秒");
System.out.println("翻译结果:"+result);
}
}
package guojihua;
import java.io.*;
/**
* 直接运行main方法即可输出翻译结果
*/
public class Main {
public static void main(String[] args) throws Exception {
BaiduTranslateDemo baiduTranslateDemo = new BaiduTranslateDemo();
// translateZhToEn(baiduTranslateDemo);
// translateEnToZh(baiduTranslateDemo);
translateTxtInfo(baiduTranslateDemo);
}
/**
* 中文翻译为英文
*/
public static void translateZhToEn(BaiduTranslateDemo baiduTranslateDemo) {
String source = "今天天气真不错";
String result;
try {
result = baiduTranslateDemo.translateZhToEn(source);
if (result == null) {
System.out.println("翻译出错");
return;
}
System.out.println(source + ":" + result);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 英文翻译为中文
*/
public static void translateEnToZh(BaiduTranslateDemo baiduTranslateDemo) {
String source = "it's a nice day today";
String result;
try {
result = baiduTranslateDemo.translateEnToZh(source);
if (result == null) {
System.out.println("翻译出错。");
return;
}
System.out.println(source + ":" + result);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 读取txt文件内容翻译为中文
*/
public static void translateTxtInfo(BaiduTranslateDemo baiduTranslateDemo) {
String sorceFilePath = "C:\\Users\\Administrator\\Desktop\\中文1.txt";
//输出结果文件
String resultFilePath = "C:\\Users\\Administrator\\Desktop\\英文.txt";
// 构建指定文件
File resultFile = new File(resultFilePath);
FileReader fr = null;
FileWriter fw = null;
BufferedWriter bw = null;
BufferedReader br = null;
OutputStream out = null;
String result;
String line = "";
try {
// 根据文件创建文件的输入流
fr = new FileReader(sorceFilePath);
br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(sorceFilePath)),"UTF-8"));
fw = new FileWriter(new File(resultFilePath));
// 写入中文字符时会出现乱码
bw = new BufferedWriter(new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(new File(resultFilePath)), "UTF-8")));
// 根据文件创建文件的输出流
out = new FileOutputStream(resultFile);
// 创建字节数组
byte[] data = new byte[1024];
StringBuffer resultBuffer=new StringBuffer();
// 读取内容,放到字节数组里面
while ((line = br.readLine()) != null) {
String message = line.trim();
System.out.println(message);
// 英文翻译为中文
if(message.trim()!=null&& !message.trim().equals("")) {
if(message.trim().indexOf("Answer")>-1) {
resultBuffer.append(message+"\t\n");
}else {
result = baiduTranslateDemo.translateZhToEn(message.trim());
System.out.println(result);
resultBuffer.append(message+"("+result+")"+"\t\n");
}
}
}
// 把内容转换成字节数组
byte[] resultdata = resultBuffer.toString().getBytes();
// 向文件写入内容
out.write(resultdata);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 关闭输入流
br.close();
fr.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
普通版的话,读取速率很慢,多行翻译很大概率会报错,但是没有字数限制;
如果翻译文件的话,还是申请高级版的,一天200万字数限制,超过会收费。
通用翻译API接入文档
https://fanyi-api.baidu.com/doc/21