先頃の項目をまとめてみます(Java+vb.net)
去年、南京に着いたばかりからこのチェックアウトを始めました.
業務過程が不便で、関連する技術問題は以下のいくつかあります.
1、javaのsocket転送
2、javaのftpアクティブ方式伝送
3、サードパーティから提供されたdllのCA署名用
4、java操作ファイル
5、java解析xml文字列
5、java更新データベース
=================================
主に以上のいくつかの問題です.仕事に参加して間もないので、経験が乏しく、多くの回り道をしました.今考えてみると、簡単な問題がたくさんあります.
その时はどうしてそんなに复雑なことを思っていましたか!!!
反省して反省します!!!
=================================
まず、socket伝送、この部分は比較的簡単ですが、サーバー側は私が書いたものではありません.そして、socketの送信と受信の際に簡単な圧縮暗号化、復号が必要です.だから、伝送するときは簡単なBufferではだめです.
このセクションでは、
http://hanbin.blog.51cto.com/1518861/879790
http://hanbin.blog.51cto.com/1518861/879788
この二つの文章...
=================================
次にftp転送といえば、もともと最初に使っていた比較的成熟したFTP転送ツールですが、実際に使っているとこのツールは使えないことに気づきました.ftpサーバのアクセス方式がアクティブであることは後で分かった.
その後、オープンソースライブラリ:edtftpjを使用しました.
これを使うと便利で、自分で書いたより使いやすいです.
以下はFTP部分のコードです.
さらにCA署名の部分は、このサードパーティが提供するDLLのため、Java呼び出しでDLLをJNIで書き換え、VCの知らない私には.NETでデーモンを作り、2つのフォルダの中のファイルに対してそれぞれ署名と署名認証を行い、その結果をそれぞれ1つのファイルに書き、Javaプログラムが呼び出しを読み取るようにしました.
PS:この過程で、Javaプログラムと.NET側のプログラムが同時に同じファイルにアクセスするという問題が発生しました.その署名結果ファイルです.その後、私はこのファイルをコピーしてjavaにコピーしたファイルを検索させ、見つけたら戻ってソースファイルを見つけて、同時にアクセスする問題はありません.
この部分は、実は人の関数を呼び出して、技術の含有量がなくて、唯一1つはマルチスレッドを使って署名と認証の2つの関数の運行を制御します.
=======================
Java操作ファイル:
この部分も大した問題ではありません.主にファイルの符号化の問題です.eclipseの下で良いプログラムをnetbeansの下に置いて使うと文字化けして、ファイルの中の中国語が文字化けして、ファイルの頭のパケット長も計算が正しくありません.
その後、このようなコードが使用されました.
もとは直接Readerで読んだので、比較的悲惨です...あとは戒めとして、自分でコードを設定できる場合は必ず自分でhold..
========================
Java解析xmlのこの部分について、とても大衆的で、dom 4 jを使います.
データベースを更新する部分は技術的価値がありません.トランザクションの更新.地球人はすべて知っていて、丑いことを捧げません...
=====================
上のコードはすべてテストコードで、注釈なんて全部ではないので、間に合わせて見ました...
業務過程が不便で、関連する技術問題は以下のいくつかあります.
1、javaのsocket転送
2、javaのftpアクティブ方式伝送
3、サードパーティから提供されたdllのCA署名用
4、java操作ファイル
5、java解析xml文字列
5、java更新データベース
=================================
主に以上のいくつかの問題です.仕事に参加して間もないので、経験が乏しく、多くの回り道をしました.今考えてみると、簡単な問題がたくさんあります.
その时はどうしてそんなに复雑なことを思っていましたか!!!
反省して反省します!!!
=================================
まず、socket伝送、この部分は比較的簡単ですが、サーバー側は私が書いたものではありません.そして、socketの送信と受信の際に簡単な圧縮暗号化、復号が必要です.だから、伝送するときは簡単なBufferではだめです.
このセクションでは、
http://hanbin.blog.51cto.com/1518861/879790
http://hanbin.blog.51cto.com/1518861/879788
この二つの文章...
=================================
次にftp転送といえば、もともと最初に使っていた比較的成熟したFTP転送ツールですが、実際に使っているとこのツールは使えないことに気づきました.ftpサーバのアクセス方式がアクティブであることは後で分かった.
その後、オープンソースライブラリ:edtftpjを使用しました.
これを使うと便利で、自分で書いたより使いやすいです.
以下はFTP部分のコードです.
- /*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
- package test;
-
- import com.enterprisedt.net.ftp.FTPClient;
- import com.enterprisedt.net.ftp.FTPConnectMode;
- import com.enterprisedt.net.ftp.FTPMessageCollector;
- import com.enterprisedt.net.ftp.FTPTransferType;
- import com.enterprisedt.util.debug.Logger;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.net.URL;
-
- /**
- *
- * @author Icer
- */
- public class FtpClient {
-
- private FTPClient ftp = null;
-
- public FTPClient connFtpServer(String host, int port, String username, String password) {
- ftp = new FTPClient();
- try {
-
- ftp.setRemoteHost(host);
- ftp.setRemotePort(port);
- FTPMessageCollector listener = new FTPMessageCollector();
- ftp.setMessageListener(listener);
-
- System.out.println("Connecting");
- ftp.connect();
-
- System.out.println("Logging in");
- ftp.login(username, password);
-
- System.out.println("Setting up passive,ASCII transfers");
- ftp.setConnectMode(FTPConnectMode.PASV);
- ftp.setType(FTPTransferType.ASCII);
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- return ftp;
- }
-
- public void upload(String localfile, URL url) {
- String host = url.getHost();
- int port = url.getPort();
- File filePath = new File(url.getPath());
- String directory = filePath.getParent().substring(1);
- String filename = filePath.getName();
- try {
- ftp.chdir(directory);
- ftp.put(new FileInputStream(localfile), filename);
- } catch (Exception e) {
- e.printStackTrace();
- System.out.println("upload failed");
- }
- }
-
-
- public void upload(String localpath, String filename) {
- try {
- if(ftp.connected()){
-
- ftp.put(localpath, filename);
- ftp.dir();
-
- System.out.println("hello");
- } else {
- System.out.println("wrong");
- }
-
- } catch (Exception e) {
- System.out.println("upload failed");
- e.printStackTrace();
- }
- }
-
- public void DownloadFile(String localpath,String filename) {
- try {
- ftp.chdir("");
- String[] files = ftp.dir("", true);
-
- for (int i = 0; i < files.length; i++) {
-
- System.out.println(files[i]);
-
- ftp.get(new FileOutputStream(localpath + filename), filename);
-
- }
- } catch (Exception e) {
- e.printStackTrace();
- System.out.println("upload failed");
- }
- }
-
- public void disConn() {
- try {
- ftp.quit();
- } catch (Exception e) {
- System.out.println("disconnection failed");
- e.printStackTrace();
- }
- }
-
-
- public static void main(String[] args) throws Exception{
-
- }
- }
さらにCA署名の部分は、このサードパーティが提供するDLLのため、Java呼び出しでDLLをJNIで書き換え、VCの知らない私には.NETでデーモンを作り、2つのフォルダの中のファイルに対してそれぞれ署名と署名認証を行い、その結果をそれぞれ1つのファイルに書き、Javaプログラムが呼び出しを読み取るようにしました.
PS:この過程で、Javaプログラムと.NET側のプログラムが同時に同じファイルにアクセスするという問題が発生しました.その署名結果ファイルです.その後、私はこのファイルをコピーしてjavaにコピーしたファイルを検索させ、見つけたら戻ってソースファイルを見つけて、同時にアクセスする問題はありません.
この部分は、実は人の関数を呼び出して、技術の含有量がなくて、唯一1つはマルチスレッドを使って署名と認証の2つの関数の運行を制御します.
=======================
Java操作ファイル:
この部分も大した問題ではありません.主にファイルの符号化の問題です.eclipseの下で良いプログラムをnetbeansの下に置いて使うと文字化けして、ファイルの中の中国語が文字化けして、ファイルの頭のパケット長も計算が正しくありません.
その後、このようなコードが使用されました.
- /**
- * @parameter fileName
- * @return
- */
- public static String readFile(String fileName) {
- String context = "";
- File f = new File(fileName);
- BufferedReader bufReader = null;
- try {
- InputStreamReader isr = new InputStreamReader(new FileInputStream(fileName), "GBK");
- bufReader = new BufferedReader(isr);
- context = bufReader.readLine();
-
- } catch (IOException ie) {
- ie.printStackTrace();
- } finally {
- try {
- bufReader.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- return context;
- }
もとは直接Readerで読んだので、比較的悲惨です...あとは戒めとして、自分でコードを設定できる場合は必ず自分でhold..
========================
Java解析xmlのこの部分について、とても大衆的で、dom 4 jを使います.
- import java.io.File;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.Writer;
- import java.util.Iterator;
-
- import org.dom4j.Document;
- import org.dom4j.DocumentException;
- import org.dom4j.DocumentHelper;
- import org.dom4j.Element;
- import org.dom4j.io.OutputFormat;
- import org.dom4j.io.SAXReader;
- import org.dom4j.io.XMLWriter;
-
- /**
- * @author Icer
- */
-
- public class Dom4jDemo {
-
- /**
- * xml
- * @return
- */
- public String parseXmlName(String xml){
- System.out.println(" :" + xml);
- String findFileName = "";
- try {
- Document document = DocumentHelper.parseText(xml);
- Element root = document.getRootElement();
- for (Iterator i = root.elementIterator(); i.hasNext();) {
- Element head = (Element) i.next();
- for (Iterator j = head.elementIterator(); j.hasNext();) {
- Element elem = (Element) j.next();
- for(Iterator k = elem.elementIterator();k.hasNext();){
- Element data = (Element) k.next();
- System.out.println(">>>"+data.getName() + ":" + data.getText());
- if("DZJGWJM".equals(data.getName())){
- findFileName = data.getText();
- }
- }
- }
- }
- } catch (DocumentException e) {
- System.out.println(e.getMessage() + "hello");
- }
- System.out.println("dom4j parserXml");
- return findFileName;
- }
-
- /**
- * xml
- * @param xml
- * @return ca
- */
- public String parseXmlCa(String xml){
- System.out.println(" :" + xml);
- String ca = "";
- try {
- Document document = DocumentHelper.parseText(xml);
- Element root = document.getRootElement();
- for (Iterator i = root.elementIterator(); i.hasNext();) {
- Element head = (Element) i.next();
- for (Iterator j = head.elementIterator(); j.hasNext();) {
- Element elem = (Element) j.next();
- System.out.println(">>>"+elem.getName() + ":" + elem.getText());
- for(Iterator k = elem.elementIterator();k.hasNext();){
- Element data = (Element) k.next();
- System.out.println(">>>"+data.getName() + ":" + data.getText());
- if("CA".equals(data.getName())){
- ca = data.getText();
- }
- }
- }
- }
- } catch (DocumentException e) {
- System.out.println(e.getMessage() + "hello");
- }
- return ca;
- }
-
- public int parseXmlStatus(String xml){
- int status = 0;
- try {
- Document document = DocumentHelper.parseText(xml);
- Element root = document.getRootElement();
- for (Iterator i = root.elementIterator(); i.hasNext();) {
- Element head = (Element) i.next();
- for (Iterator j = head.elementIterator(); j.hasNext();) {
- Element elem = (Element) j.next();
- System.out.println(">>>"+elem.getName() + ":" + elem.getText());
- if("STATUS".equals(elem.getName())){
- status = Integer.parseInt(elem.getTextTrim());
- }
- }
- }
- } catch (DocumentException e) {
- System.out.println(e.getMessage() + "hello");
- }
- return status;
- }
データベースを更新する部分は技術的価値がありません.トランザクションの更新.地球人はすべて知っていて、丑いことを捧げません...
=====================
上のコードはすべてテストコードで、注釈なんて全部ではないので、間に合わせて見ました...