根据取到文件的内容 生成二进制文件 并通过servlet获取
来源:互联网 发布:app美工设计招聘 编辑:程序博客网 时间:2024/06/06 03:16
无线那边需求需要,他们想从服务器上获取二进制文件 要我们给他们提供一个的接口
//生成二进制文件 到服务器端
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.ByteBuffer;
import java.text.SimpleDateFormat;
import java.util.BitSet;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import com.mapbar.traffic.util.CorpTrace;
import com.mapbar.traffic.util.PlatProperty;
/**
* 生成实时路况数据文件Binary的工具类
*
*
*/
public class Binary {
private static long lastModified = 0; //全局文件最后更新时间缓存
public static void main(String[] args) {
deal();
}
public static void deal() {
File f1 = new File("c:/test.txt"); //取文件内容1
File f2 = new File("c:/test1.txt"); //取文件内容2
BufferedReader br1 = null;
BufferedReader br2 = null;
DataOutputStream out = null;
try {
if (!f1.exists()) {
throw new Exception("c:/test.txt is not Found!");
} else if (!f2.exists()) {
throw new Exception("c:/test1.txt is not Found!");
}
br1 = new BufferedReader(new FileReader(f1));
br2 = new BufferedReader(new FileReader(f2));
HashMap hs2 = new HashMap();
long lm = f2.lastModified(); //最后更新时间戳
// System.out.println(lastModified==lm);
if(lastModified!=0){
if(lastModified!=lm) { //如果最后更新时间已经做了更新那么就重新生成文件。
// System.out.println("数据文件不一致!");
lastModified=lm;
}else return;
}else{
lastModified=lm;
}
// System.out.println("test");
String line2 = null;
while ((line2 = br2.readLine()) != null) {
if (!"".equals(line2.trim())) {
hs2.put(line2.split(",")[0], line2.split(",")[1] + ","
+ line2.split(",")[2]);
}
}
BitSet a;
ByteBuffer bb = ByteBuffer.allocate(1024);二进制文件缓存buffer
short city = Short.parseShort("1");//城市编码
int pos = 0;
bb.putShort(city);
bb.putShort(Short.parseShort(String.valueOf((new Date()
.getMinutes() / 5))));
pos = bb.position();
bb.putShort((short) 0);
String line1 = null;
byte k = 0;
byte l = 0;
byte m = 0;
byte n = 0;
int count = 0;
int count1 = 0;
while ((line1 = br1.readLine()) != null) {
count += 1;
if (!"".equals(line1.trim())) {
String ss = (String) hs2.get(line1.split(",")[1]);
if (ss != null) {
String s = line1.split(",")[2];
String z = null;
if ("1".equals(s)) {
z = ss.split(",")[0];
} else if ("-1".equals(s)) {
z = ss.split(",")[1];
}
if (count == 1)
k = lukuang(z);
if (count == 2)
l = lukuang(z);
if (count == 3)
m = lukuang(z);
if (count == 4)
n = lukuang(z);
} else {
if (count == 1)
k = 0;
if (count == 2)
l = 0;
if (count == 3)
m = 0;
if (count == 4)
n = 0;
}
}
if (count == 4) {
//位运算 二进制文件加密
//n 左偏移6位 m左偏移4位 l左偏移2位
byte ss = (byte) ((n << 6) + (m << 4) + (l << 2) + k);
bb.put(ss);
k = 0;
l = 0;
m = 0;
n = 0;
count = 0;
}
count1 += 1;
}
if (count < 4 && count > 0) {
byte ss = (byte) ((n << 6) + (m << 4) + (l << 2) + k);
bb.put(ss);
k = 0;
l = 0;
m = 0;
n = 0;
count = 0;
}
out = new DataOutputStream(
new BufferedOutputStream(new FileOutputStream("c:/testBINARY.txt")));
//生成二进制文件到本地服务器端
int c = count1 % 4;
if (c == 0)
count1 = count1 / 4;
else
count1 = count1 / 4 + 1;
bb.putShort(pos, (short) count1);
out.write(bb.array(), 0, count1+6);
CorpTrace.getLogger().info("已经生成Binary文件!");
} catch (Exception ex) {
CorpTrace.getLogger().error(
CorpTrace.formatMessage(
"Failed to get realtime data from yootu!", ex,
CorpTrace.PRINTSTACK));
} finally {
try {
if (br1 != null)
br1.close();
if (br2 != null)
br2.close();
if (out != null)
out.close();
} catch (IOException e) {}
}
}
public static byte lukuang(String s) {
if ("A".equals(s)) {
return 1;
} else if ("B".equals(s)) {
return 2;
} else if ("C".equals(s)) {
return 3;
} else
return 0;
}
}
//一个servlet 从服务器端取这个二进制文件。
import java.io.File;
import java.io.RandomAccessFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.*;
import com.mapbar.traffic.util.CorpTrace;
import com.mapbar.traffic.util.PlatProperty;
public class BinaryServlet extends HttpServlet {
public void doGet(HttpServletRequest httpservletrequest,
HttpServletResponse response) {
try {
File f1 = new File(PlatProperty.UTBINARY_FILE);
if (f1.exists()) {
RandomAccessFile rafData = new RandomAccessFile(f1, "r");
byte[] __buffer = new byte[(int) rafData.length()];
rafData.seek(0);
rafData.read(__buffer, 0, __buffer.length);
rafData.close();
response.setHeader("Server", "MapbarServer");
response.setHeader("Content-length", "" + __buffer.length);
ServletOutputStream so = response.getOutputStream();
if (__buffer != null) {
so.write(__buffer);
so.close();
} else {
// out.println("ERR");
}
}
} catch (Exception ex) {
CorpTrace.getLogger().error(
CorpTrace.formatMessage("Failed to convert latlon!", ex,
CorpTrace.PRINTSTACK));
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) {
doGet(request, response);
}
}
//生成二进制文件 到服务器端
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.ByteBuffer;
import java.text.SimpleDateFormat;
import java.util.BitSet;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import com.mapbar.traffic.util.CorpTrace;
import com.mapbar.traffic.util.PlatProperty;
/**
* 生成实时路况数据文件Binary的工具类
*
*
*/
public class Binary {
private static long lastModified = 0; //全局文件最后更新时间缓存
public static void main(String[] args) {
deal();
}
public static void deal() {
File f1 = new File("c:/test.txt"); //取文件内容1
File f2 = new File("c:/test1.txt"); //取文件内容2
BufferedReader br1 = null;
BufferedReader br2 = null;
DataOutputStream out = null;
try {
if (!f1.exists()) {
throw new Exception("c:/test.txt is not Found!");
} else if (!f2.exists()) {
throw new Exception("c:/test1.txt is not Found!");
}
br1 = new BufferedReader(new FileReader(f1));
br2 = new BufferedReader(new FileReader(f2));
HashMap hs2 = new HashMap();
long lm = f2.lastModified(); //最后更新时间戳
// System.out.println(lastModified==lm);
if(lastModified!=0){
if(lastModified!=lm) { //如果最后更新时间已经做了更新那么就重新生成文件。
// System.out.println("数据文件不一致!");
lastModified=lm;
}else return;
}else{
lastModified=lm;
}
// System.out.println("test");
String line2 = null;
while ((line2 = br2.readLine()) != null) {
if (!"".equals(line2.trim())) {
hs2.put(line2.split(",")[0], line2.split(",")[1] + ","
+ line2.split(",")[2]);
}
}
BitSet a;
ByteBuffer bb = ByteBuffer.allocate(1024);二进制文件缓存buffer
short city = Short.parseShort("1");//城市编码
int pos = 0;
bb.putShort(city);
bb.putShort(Short.parseShort(String.valueOf((new Date()
.getMinutes() / 5))));
pos = bb.position();
bb.putShort((short) 0);
String line1 = null;
byte k = 0;
byte l = 0;
byte m = 0;
byte n = 0;
int count = 0;
int count1 = 0;
while ((line1 = br1.readLine()) != null) {
count += 1;
if (!"".equals(line1.trim())) {
String ss = (String) hs2.get(line1.split(",")[1]);
if (ss != null) {
String s = line1.split(",")[2];
String z = null;
if ("1".equals(s)) {
z = ss.split(",")[0];
} else if ("-1".equals(s)) {
z = ss.split(",")[1];
}
if (count == 1)
k = lukuang(z);
if (count == 2)
l = lukuang(z);
if (count == 3)
m = lukuang(z);
if (count == 4)
n = lukuang(z);
} else {
if (count == 1)
k = 0;
if (count == 2)
l = 0;
if (count == 3)
m = 0;
if (count == 4)
n = 0;
}
}
if (count == 4) {
//位运算 二进制文件加密
//n 左偏移6位 m左偏移4位 l左偏移2位
byte ss = (byte) ((n << 6) + (m << 4) + (l << 2) + k);
bb.put(ss);
k = 0;
l = 0;
m = 0;
n = 0;
count = 0;
}
count1 += 1;
}
if (count < 4 && count > 0) {
byte ss = (byte) ((n << 6) + (m << 4) + (l << 2) + k);
bb.put(ss);
k = 0;
l = 0;
m = 0;
n = 0;
count = 0;
}
out = new DataOutputStream(
new BufferedOutputStream(new FileOutputStream("c:/testBINARY.txt")));
//生成二进制文件到本地服务器端
int c = count1 % 4;
if (c == 0)
count1 = count1 / 4;
else
count1 = count1 / 4 + 1;
bb.putShort(pos, (short) count1);
out.write(bb.array(), 0, count1+6);
CorpTrace.getLogger().info("已经生成Binary文件!");
} catch (Exception ex) {
CorpTrace.getLogger().error(
CorpTrace.formatMessage(
"Failed to get realtime data from yootu!", ex,
CorpTrace.PRINTSTACK));
} finally {
try {
if (br1 != null)
br1.close();
if (br2 != null)
br2.close();
if (out != null)
out.close();
} catch (IOException e) {}
}
}
public static byte lukuang(String s) {
if ("A".equals(s)) {
return 1;
} else if ("B".equals(s)) {
return 2;
} else if ("C".equals(s)) {
return 3;
} else
return 0;
}
}
//一个servlet 从服务器端取这个二进制文件。
import java.io.File;
import java.io.RandomAccessFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.*;
import com.mapbar.traffic.util.CorpTrace;
import com.mapbar.traffic.util.PlatProperty;
public class BinaryServlet extends HttpServlet {
public void doGet(HttpServletRequest httpservletrequest,
HttpServletResponse response) {
try {
File f1 = new File(PlatProperty.UTBINARY_FILE);
if (f1.exists()) {
RandomAccessFile rafData = new RandomAccessFile(f1, "r");
byte[] __buffer = new byte[(int) rafData.length()];
rafData.seek(0);
rafData.read(__buffer, 0, __buffer.length);
rafData.close();
response.setHeader("Server", "MapbarServer");
response.setHeader("Content-length", "" + __buffer.length);
ServletOutputStream so = response.getOutputStream();
if (__buffer != null) {
so.write(__buffer);
so.close();
} else {
// out.println("ERR");
}
}
} catch (Exception ex) {
CorpTrace.getLogger().error(
CorpTrace.formatMessage("Failed to convert latlon!", ex,
CorpTrace.PRINTSTACK));
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) {
doGet(request, response);
}
}
- 根据取到文件的内容 生成二进制文件 并通过servlet获取
- 如何通过javabean取数据库的内容,并显示到页面上
- java 根据网址 获取内容 并输出到控制台
- 根据模板生成word文件并导出保存到本地
- 根据模板生成word文件并导出保存到本地
- 通过shell获取文件内容并返回给代码
- 通过java Servlet request 获取payload的内容
- 从键盘上输入文件的内容和要保存的文件名称,然后根据输入的名称创建文件,并将内容保存到文件中
- php通过post获取二进制流并生成文件
- 获取web目录下的文件并输出内容到页面
- 根据文件夹地址获取txt文件并获取txt内容索引
- 通过反射根据类名获取到类的实例
- 通过java的io流将本地文件读取到控制台,并将文件内容再次写入另一个文件中
- 获取并使用通过Downloader对象下载的内容
- 动态生成文本框并获取其中的内容
- 在Linux中编译汇编文件并生成bin二进制文件
- java 将xml格式的文本生成xml文件,并获取xml中指定节点的内容
- 通过url,获取html内容,并解析
- 80386控制寄存器
- 大白话版本的 软件工程实践者的思想
- OpenSolaris project Brussels wite paper
- 开始好好利用这块资源了。。。
- 编码的故事
- 根据取到文件的内容 生成二进制文件 并通过servlet获取
- *xdata a 和 xdata *a
- 发现新天地 - Google Sky
- 对当前虚拟货币问题的思考(上)
- SaaS基础架构—云计算
- 2008.11 中国软件产业最大规模前100家企业统计
- Hashcode的作用
- 访问本地IIS上站点,要求输入用户名和密码
- 匆匆(朱自清)你聪明的,告诉我,我们的日子为什么一去不复返呢?