最近、私は特定のウェブサイトから小さなプロジェクトを学びました。日中はクラスがあるので、夜にすべて書きました。私は今日それを完了しました。
このプロジェクトは、主にファイルアップローダーを実装し、クライアントログインを介してサーバーのデータベース(ローカル)にローカルファイルをアップロードします。
まず、次のように2つのテーブルを作成します。
ファイル情報表
テーブル `fileInfo`(` fname` char(50)not null、 `finfo` blob not null、` fid` int(10)null auto_increment、primary key( `fid`))エンジン= innodb auto_increment = 4 default charset = utf8;
ユーザー情報テーブル
テーブル「ユーザー」( `username` char(25)not null、` password` char(25)not null、 `uateid` int(10)noll auto_increment、primary key(` useid`))engine = innodb auto_increment = 19 default charset = utf8;
ユーザークラス
パッケージfileupload; java.io.serializableをインポートします。 /**ユーザーエンティティクラス*/パブリッククラスユーザーは、Serializable {private static final long serialversionuid = -7279093338433333333181L; private int useid; //ユーザー番号プライベート文字列usename; //ユーザー名プライベート文字列usepsd; //ユーザーパスワードpublic user(){} public user(string usename、string usepsd){super(); this.usename = usename; this.usepsd = usepsd; } public user(int useid、string usename、string usepsd){super(); this.useid = useId; this.usename = usename; this.usepsd = usepsd; } public int getUseId(){return useId; } public void setuseid(int useid){this.useid = useId; } public string getUsename(){return usename; } public void setusename(string usename){this.usename = usename; } public string getUsepsd(){return usepsd; } public void setusepsd(string usepsd){this.usepsd = usepsd; }}userserviceクラス
パッケージfileupload; / ***ユーザーログインおよび登録操作クラス*/ java.sql.connection; Java.sql.drivermanagerをインポートします。 Java.sql.preparedStatementをインポートします。 java.sql.resultsetをインポートします。 java.sql.sqlexceptionをインポートします。パブリッククラスユーザーサービス{プライベート接続conn = null; private reparedStatement ptmt = null;プライベート結果rs = null; //ユーザーログインpublic boolean login(user user){string url = "jdbc:mysql:// localhost:3306/fileupload"; // database connection string sql = "select * username =?and password =??"; try {class.forname( "org.gjt.mm.mysql.driver")。newInstance(); conn = drivermanager.getConnection(url、 "root"、 "1995520"); ptmt = conn.preparestatement(sql); ptmt.setString(1、user.getusename()); ptmt.setString(2、user.getusepsd()); rs = ptmt.executequery(); if(rs.next()){return true; }} catch(例外e){e.printstacktrace(); }最後に{try {rs.close(); ptmt.close(); } catch(sqlexception e){e.printstacktrace(); }} falseを返します。 } //ユーザー登録パブリックブールレジスタ(ユーザーユーザー){system.out.println( "hello"); string url = "jdbc:mysql:// localhost:3306/fileupload"; // database connection string string sql = "ユーザー(username、password)values(?、?)"; try {class.forname( "org.gjt.mm.mysql.driver")。newInstance(); conn = drivermanager.getConnection(url、 "root"、 "1995520"); ptmt = conn.preparestatement(sql); ptmt.setString(1、user.getusename()); ptmt.setString(2、user.getusepsd()); ptmt.executeUpdate(); } catch(Exception e){e.printstacktrace(); falseを返します。 }最後に{try {//rs.close(); ptmt.close(); } catch(sqlexception e){e.printstacktrace(); }} trueを返します。 }}fileiofoクラス
パッケージfileupload; java.io.serializableをインポートします。 /**ファイルエンティティクラス*/ public class fileInfo実装serializable {private static final long serialversionuid = 2554622626228481455l; private int fid; //ファイル番号プライベート文字列fname; //ファイル名プライベートバイト[] fcontent; //ファイルコンテンツpublic fileinfo(){} public fileinfo(string fname、byte [] fcontent){super(); this.fname = fname; this.fcontent = fcontent; } public fileInfo(int fid、string fname、byte [] fcontent){super(); this.fid = fid; this.fname = fname; this.fcontent = fcontent; } public int getFid(){return fid; } public void setFid(int fid){this.fid = fid; } public string getFname(){return fname; } public void setfname(string fname){this.fname = fname; } public byte [] getfcontent(){return fcontent; } public void setfcontent(byte [] fcontent){this.fcontent = fcontent; }}Fileserviceクラス
パッケージfileupload; / ***ファイルアップロード操作クラス*/ java.sql.connectionをインポートします。 Java.sql.drivermanagerをインポートします。 Java.sql.preparedStatementをインポートします。 java.sql.sqlexceptionをインポートします。 public class fileservice {private connection conn = null; private reparedStatement ptmt = null; //ファイルをデータベースに保存しますパブリックブールンセーブ(fileinfo file){string url = "jdbc:mysql:// localhost:3306/fileupload"; // database connection string sql = "fileinfo(fname、finfo)value(?、?)"; try {class.forname( "org.gjt.mm.mysql.driver")。newInstance(); conn = drivermanager.getConnection(url、 "root"、 "1995520"); ptmt = conn.preparestatement(sql); ptmt.setString(1、file.getfname()); ptmt.setbytes(2、file.getfcontent()); ptmt.executeUpdate(); } catch(Exception e){e.printstacktrace(); falseを返します。 }最後に{try {ptmt.close(); } catch(sqlexception e){e.printstacktrace(); }} trueを返します。 }}パッケージfileupload;
java.io.ioexceptionをインポートします。 java.net.serversocketをインポートします。 java.net.socketをインポートします。 /** Start Server Class*/ Public Class StartServer {@SuppressWarnings( "Resource")public static void main(String [] args){try {// 1。サーバー側ソケット、つまり、バウンドポートを指定し、このポートServersocket Serversocket = new Serversocket(8888);ソケットソケット= null; System.out.println( "サーバーが起動され、クライアントが接続するのを待っています..."); //クライアントの接続を待機するのを長く聞いてください(//2。Accept()メソッドを呼び出してリスニングを開始します。 //新しいスレッドServerThread ServerThread = new ServerThread(Socket); //スレッドServerThread.start();を起動します。 }} catch(ioException e){// TODOの自動生成されたキャッチブロックe.printstacktrace(); }}}}} [java]プレーンコピーの表示コードスライスから派生したコードスライスを表示パッケージfileupload; java.io.ioexceptionをインポートします。 / ** *クライアントクラスを開始 */ public class startclient {public static void main(string [] args)throws ioexception {socketclient client = new SocketClient(); client.showmainmenu(); //メインメニューを表示}}パッケージfileupload;
java.io.ioexceptionをインポートします。 java.io.objectinputStreamをインポートします。 java.io.objectOutputStreamをインポートします。 java.net.socketをインポートします。 javax.swing.joptionpaneをインポートします。 /**サーバー側のマルチスレッドクラス*/ public class serverthread extends thread {static socket socket = null; private static objectInputStream ois = null; //オブジェクト入力ストリームプライベートオブジェクトoutputStream ooos = null; //オブジェクト出力ストリームプライベートユーザーサービスUS = new Userservice(); //ユーザービジネスオブジェクトプライベートファイルサービスFS = new fileservice = new fileservice // } public void run(){try {ois = new objectInputStream(socket.getInputStream()); //クライアントによって送信されたメッセージを受信oOS = new objectOutputStream()); //クライアントがサーバーに送信したコマンド操作を読み取ります= execute(転送); //クライアントがサーバーに送信したコマンド操作を実行します。writeObject(転送); //クライアントに応答} catch(ioException | classNotFoundException e){e.printStackTrace(); }}/**クライアントがサーバーに送信したコマンド操作を実行します*/ privateコマンドトランスファーexecute(commandTransfer Transfer){string cmd = transfer.getcmd(); //現在の操作のコマンドを取得するif(cmd.equals( "login")){//ユーザーログインユーザー=(ユーザー)Transer.getData(); boolean flag = us.login(user); if(flag)joptionpane.showmessageialog(null、 "ログインに正常に!"); transfer.setflag(flag); if(flag){//ログインが成功したかどうかを判断します。 } else {transfer.setResult( "ユーザー名またはパスワードが間違っています。もう一度ログインしてください!"); }} else if(cmd.equals( "Register")){//ユーザー登録ユーザー=(user)transfer.getData(); us.register(user); //ユーザーboolean flag = us.register(user); if(flag)joptionpane.showmessageialog(null、 "register fursefully!"); transfer.setflag(flag); if(flag){transfer.setResult( "登録成功!"); } else {transfer.setResult( "登録失敗!"); }} else if(cmd.equals( "uploadfile")){fileinfo file =(fileinfo)transfer.getData(); fs.save(file); boolean flag = fs.save(file); if(flag)joptionpane.showMessageialog(null、 "Uploaded upload fored!"); transfer.setflag(flag); if(flag){transfer.setResult( "アップロードされたアップロード!"); } else {transfer.setResult( "アップロード障害!"); }} return転送; }} package fileupload; java.io.bufferedinputStreamをインポートします。 java.io.fileinputStreamをインポートします。 java.io.filenotfoundexceptionをインポートします。 java.io.ioexceptionをインポートします。 java.io.objectinputStreamをインポートします。 java.io.objectOutputStreamをインポートします。 java.net.socketをインポートします。 java.net.unknownhostexceptionをインポートします。 Java.util.scannerをインポートします。 / ** *メインメニュークラス */パブリッククラスSocketClient {Scanner input = new Scanner(System.in);プライベート静的ソケットソケット= null; //クライアントソケット//メインメニューpublic void showmainmenu()throws ioexception {system.out.println( "****** xxファイルアップローダーへようこそ*******"); System.out.println( "1.login/n2.register/n3.login"); System.out.println( "****************************************); System.out.println( "選択:"); int choice = input.nextint(); //ユーザーの選択ソケットを取得= new Socket( "localhost"、8888); switch(choice){case 1:showlogin(); // breakにログインします。ケース2:showregister(); //登録ブレーク;ケース3:System.out.println( "このシステムをサポートするよう歓迎"); System.Exit(0);デフォルト:system.out.println( "入力が正しくない!"); System.Exit(0); }} //ユーザー登録private void showregister()throws ioexception {user user = new user(); CommandTransfer Transfer = new CommandTransfer(); int count = 0; //ログイン時間の数(true){count ++; if(count> 3){system.out.println( "3連続でログインしなかった場合、プログラムは終了します!"); System.Exit(0); } system.out.print( "ユーザー名を入力してください:"); user.setusename(input.next()); System.out.print( "パスワードを入力してください:"); user.setusepsd(input.next()); System.out.print( "パスワードをもう一度入力してください:");文字列repassword = input.next(); if(!user.getusepsd()。equals(repassword)){system.out.println( "2回入力されたパスワードは一貫性がない!"); System.out.println( "*********************");続く; } transfer.setcmd( "Register"); Transfer.setData(user); try {senddata(transfer); //サーバーにデータを送信する= getData(); //サーバーSystem.out.println(transfer.getResult()); //出力表示結果system.out.println( "*******************************************************************************************"); if(transfer.isflag()){break; //登録が成功した場合、登録は繰り返されません}} catch(unknownhostexception e){e.printstacktrace(); } catch(ioexception e){e.printstacktrace(); }最後に{}} showlogin(); //登録後のログインが成功した後} commandTransfer res = null; try {if(socket.isclosed())socket = new Socket( "localhost"、8888); ois = new ObjectInputStream(socket.getInputStream()); res =(commandTransfer)ois.readObject(); } catch(ioException e){// todo auto-fenated catch block e.printstacktrace(); } catch(classNotFoundException e){// todo auto-enerated catch block e.printstacktrace(); }最後に{if(ois!= null){try {ois.close(); //socket.close(); } catch(ioException e){// todo auto-fenated catch block e.printstacktrace(); }}} RESを返します。 } /**ファイルのアップロード* / private void showuploadfile()throws ioexception {system.out.println( "ファイルをアップロードするための絶対パスを入力してください:"); string path = input.next(); fileinfo file = null; fileinputStream fis = null; bufferedinputStream bis = null; string fname = path.substring(path.lastindexof( "/") + 1); try {fis = new fileinputStream(path); byte [] fcontent = new byte [fis.abailable()]; bis = new BufferedInputStream(FIS); bis.read(fcontent); file = new fileInfo(fname、fcontent); } catch(filenotfoundexception e){e.printstacktrace(); }最後に{bis.close(); fis.close(); } commandTransfer Transfer = new CommandTransfer(); transfer.setcmd( "uploadfile"); transf.setData(file); try {senddata(transfer); //サーバーにデータを送信します= getData(); //サーバーsystem.out.println(transfer.getResult()); //出力表示結果} catch(unknownhostexception e){e.printstacktrace(); } catch(ioexception e){e.printstacktrace(); }最後に{}} //サーバーにデータを送信しますpublic static void senddata(commandtransfer cmd)throws ioexception {// todo auto-feenated method objectutputStream ooos = null; try {if(socket.isclosed())//ソケットが閉じているかどうかを判断します。閉じた場合、open socket = new Socket( "localhost"、8888); oos = new objectOutputStream(socket.getOutputStream()); oos.writeobject(cmd); } catch(ioException e){// todo auto-fenated catch block e.printstacktrace(); }} //ユーザーはプライベートvoidにログインしますshowlogin()throws ioexception {user user = new user(); CommandTransfer Transfer = new CommandTransfer(); while(true){system.out.print( "ユーザー名を入力してください:"); user.setusename(input.next()); System.out.print( "パスワードを入力してください:"); user.setusepsd(input.next()); transfer.setcmd( "login"); Transfer.setData(user); {senddata(transfer); //サーバーにデータを送信する= getData(); //サーバーSystem.out.println(transfer.getResult()); //出力表示結果System.out.println( "**************************************************************************************************"); if(transfer.isflag()){break; //登録が成功した場合、登録は繰り返されません}} catch(unknownhostexception e){e.printstacktrace(); } catch(ioexception e){e.printstacktrace(); }最後に{}} showuploadfile(); //ログイン後にファイルをアップロード}}}}操作レンダリングは次のとおりです。
ファイルはデータベースに保存されています。このプロジェクトは、ソケット通信とMySQLを練習したい友人にとって非常に良いことです。
上記は、編集者によって導入されたJavaソケット+MySQL実装シンプルファイルアップローダーです。私はそれが誰にでも役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は、すべての人に時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!