




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上期末作品報(bào)告 課程名稱: Android應(yīng)用程序開發(fā) 學(xué) 號(hào): 姓 名: 班 別: 專心-專注-專業(yè)引言在這個(gè)快節(jié)奏的時(shí)代,人們的空余時(shí)間越來越零碎,而且人們對(duì)智能手機(jī)的依賴越來越重,所以,一個(gè)擁有豐富功能且能隨時(shí)進(jìn)行電子書閱讀的在線小說閱讀器的出現(xiàn),則是我們刻不容緩的事情。此軟件是在Android平臺(tái)上進(jìn)行設(shè)計(jì)開發(fā),此軟件的開發(fā)是通過了客戶需求分析階段以及技術(shù)可行性分析階段,然后進(jìn)行總體設(shè)計(jì)階段和詳細(xì)設(shè)計(jì)編碼等階段。此軟件不僅具有基本的電子書閱讀功能,而且還擁有豐富的實(shí)用功能設(shè)計(jì)。經(jīng)過不斷的測(cè)試與完善,電子書閱讀器功能穩(wěn)定,并且在真機(jī)上對(duì)其進(jìn)行了測(cè)試與驗(yàn)證,基本上達(dá)
2、到了用戶的需求標(biāo)準(zhǔn)。1、功能分析1.1項(xiàng)目來源此次開發(fā)的項(xiàng)目是在線小說閱讀器,屬于自選項(xiàng)目。隨著社會(huì)的發(fā)展,人們的生活節(jié)奏也越來越快空閑時(shí)間也越來越零碎,人們沒有了大段的時(shí)間來進(jìn)行書籍的閱讀,所以一款能利用零碎時(shí)間進(jìn)行隨時(shí)閱讀的軟件成為了我們的需求。而一款能在人們隨身攜帶的手機(jī)上運(yùn)行的閱讀軟件成為了大家的選擇。以前我們看看雜志,小說都要去圖書館借閱,而且時(shí)間有限,很不方便;而在電腦上看雜志,看小說,文檔也是很不方便的。以此看來,一個(gè)好的手機(jī)閱讀器軟件的開發(fā)是相當(dāng)有必要的。1.2開發(fā)目標(biāo)在線小說閱讀器的開發(fā)目標(biāo)就是讓用戶可以把零碎的空余時(shí)間有效的利用到書籍的閱讀上,而且用戶在沒有網(wǎng)路的情況下也可
3、以正常的進(jìn)行書籍的閱讀,讓用戶擺脫書籍的笨重?cái)y帶不方便等確定,給予閱讀者更大的便利性更好的舒適性。此軟件是在Android平臺(tái)上進(jìn)行設(shè)計(jì)開發(fā),它的界面豐富簡(jiǎn)潔但是卻不簡(jiǎn)單,它包含了書架界面、文件查看界面、軟件設(shè)置界面、書籍閱讀界面等界面,它的功能全面。其優(yōu)越性表現(xiàn)在:自動(dòng)掃描手機(jī)里的所有書籍、手動(dòng)從文件夾中選擇添加書籍、自動(dòng)為書籍生成章節(jié)目錄、添加查看書簽、全文關(guān)鍵詞搜索、閱讀主題選擇、閱讀字體大小設(shè)置等功能。此外,給用戶更清晰方便的界面,也是本軟件的出發(fā)點(diǎn)之一。2、功能設(shè)計(jì)2.1系統(tǒng)功能設(shè)計(jì) 根據(jù)需要,在線圖書閱讀器主要實(shí)現(xiàn)即時(shí)的在線閱讀,主要包含以下功能: (1)在線即時(shí)搜索圖書:可以按照
4、書名、作者進(jìn)行搜索所要閱讀的書籍。(2)在線即時(shí)閱讀圖書:在線進(jìn)行電子圖書的全屏閱讀。(3)書簽功能:可以定制書簽,以方便下次閱讀。 (4)預(yù)讀功能:可以預(yù)讀下一頁的內(nèi)容,減少用戶等待的時(shí)間。(5)選章閱讀功能:可以根據(jù)用戶需要,有選擇的進(jìn)行閱讀。 22軟件的總體架構(gòu) 在線小說閱讀器采用PHP+Android+Sphinx的架構(gòu)模式(如圖1所示)。用PHP做服務(wù)端,提供與閱讀相關(guān)的一系列接口。Android做客戶端,與服務(wù)器端通信,完成用戶的相關(guān)操作??蛻舳伺c服務(wù)器端以 SOAP作為基礎(chǔ)通訊協(xié)議。Sphinx作為搜索圖書的引擎,提供強(qiáng)大的分詞、查詢等服務(wù)。在線圖書閱讀器的系統(tǒng)架構(gòu):在線小說閱讀
5、器軟件主要分為8個(gè)功能大模塊如圖3所示,分別是歡迎模塊、軟件主界面、書籍管理、閱讀管理、文件瀏覽、系統(tǒng)管理、使用幫助、關(guān)于。其中書籍模塊中還要文件掃描模塊,閱讀管理中有章節(jié)管理、書簽管理、搜索管理。系統(tǒng)設(shè)置中有密碼設(shè)置。其各個(gè)模塊的詳細(xì)設(shè)計(jì)如下:1.軟件歡迎模塊。該模塊主要實(shí)現(xiàn)的功能是,通過Handler來實(shí)現(xiàn)一個(gè)2秒的緩沖界面,然后通過SharedPreferences讀取配置文件,判斷是否有密碼。如果有密碼則跳轉(zhuǎn)至密碼驗(yàn)證界面;如果沒有密碼則判斷是否為第一次使用此軟件,如果是第一次使用則跳轉(zhuǎn)至引導(dǎo)頁面。2.軟件主界面模塊。該模塊是一個(gè)通過TabHost標(biāo)簽組件來實(shí)現(xiàn)的一個(gè)分類管理功能。本界
6、面的標(biāo)簽在屏幕的最下方,分別是:文件管理、我的書架、我的設(shè)置。點(diǎn)擊不同的標(biāo)簽則顯示不同的界面,默認(rèn)顯示標(biāo)簽為“我的書架”,打開選項(xiàng)中會(huì)出現(xiàn)對(duì)應(yīng)的視圖。實(shí)現(xiàn)了將本程序關(guān)聯(lián)成手機(jī)默認(rèn)打開程序中,即從外部打開文本文件時(shí)選擇查看方式中會(huì)出現(xiàn)本軟件圖標(biāo)供用戶選擇以本軟件打開。3.書籍管理。該模塊是以書架的模式來展現(xiàn)書籍,并可以對(duì)書籍進(jìn)行一些操作,本模塊共有3個(gè)書架分別為:“最近閱讀”、“歷史閱讀”、“收藏閱讀”,默認(rèn)顯示是“最近閱讀”書架。本模塊有導(dǎo)航按鈕和書籍選擇按鈕。當(dāng)彈出導(dǎo)航欄時(shí),則把書籍從每行顯示三本書籍調(diào)整到每行顯示兩本書籍。導(dǎo)航欄中與三大項(xiàng):分類排序、添加書籍、清空書籍。每項(xiàng)里面又有子菜單。
7、當(dāng)點(diǎn)擊導(dǎo)航里的按鈕時(shí)會(huì)顯示子功能導(dǎo)航,當(dāng)再點(diǎn)擊其它按鈕時(shí),會(huì)收起前面的子功能導(dǎo)航,展開當(dāng)前的子功能。當(dāng)單擊書籍選擇按鈕時(shí)會(huì)彈出書籍選擇窗口,選擇里面的書架則進(jìn)入相應(yīng)的書架界面,同時(shí)還可以通過左右滑動(dòng)來切換書架界面。當(dāng)單擊書籍時(shí)會(huì)打開相應(yīng)的書籍閱讀界面,長(zhǎng)按某書籍時(shí)會(huì)彈出書籍操作窗口。4.文件瀏覽。該模塊使用ListView組件顯示文件目錄,不同的文件類型顯示不同的圖標(biāo)。最上面標(biāo)題欄有導(dǎo)航按鈕,當(dāng)點(diǎn)擊導(dǎo)航按鈕時(shí)會(huì)從左側(cè)彈出導(dǎo)航欄,導(dǎo)航欄中有標(biāo)記文件按鈕、分類排序按鈕和添加到書架按鈕,點(diǎn)擊標(biāo)記文件按鈕或長(zhǎng)按某文件或目錄時(shí)則切換到多選模式,其中有多選按鈕、反選按鈕和取消按鈕;點(diǎn)擊分類排序則彈出子菜單
8、,其中有按名稱排序、按大小排序、按時(shí)間排序和按類型排序;點(diǎn)擊添加到書架時(shí)如果為選擇文件則自動(dòng)進(jìn)入多選模式讓用戶進(jìn)行文件選擇,如果用戶未選擇則提示“請(qǐng)選擇書籍”,進(jìn)行選擇是用戶可選擇文件或目錄,系統(tǒng)會(huì)自動(dòng)進(jìn)行掃描,把符合要求的文件添加到“最近書架”中,并彈出提示信息,其中有失敗個(gè)數(shù)、已存在個(gè)數(shù)和成功個(gè)數(shù)。在多選模式下點(diǎn)擊返回按鈕或點(diǎn)擊標(biāo)記文件會(huì)取消多選模式。非多選模式下,用戶點(diǎn)擊文件時(shí)本軟件會(huì)根據(jù)文件擴(kuò)展名來判斷打開文件方式,如果是文本文件則直接用本軟件打開,并把其添加到“最近書架”中,其它格式則調(diào)用對(duì)應(yīng)的軟件打開,如果是未識(shí)別的類型則提示“沒有打開此文件的應(yīng)用”。5.閱讀管理。該模塊通過自定義
9、一個(gè)View視圖來顯示書頁,通過自定義類來讀取文本內(nèi)容并通過onDraw()方法把文件名、文本內(nèi)容、電量信息、時(shí)間信息和已讀百分比進(jìn)行繪制成圖片,并通過View來把繪制的圖片顯示出來。第一次進(jìn)入閱讀頁面是會(huì)有顯示引導(dǎo)頁面來指導(dǎo)用戶如何讀本頁面進(jìn)行操作。本頁面操作包括點(diǎn)擊事件和滑動(dòng)事件,點(diǎn)擊左側(cè)屏幕進(jìn)行向上翻頁,點(diǎn)擊右側(cè)屏幕進(jìn)行向下翻頁,點(diǎn)擊屏幕中間畫出菜單選項(xiàng)。此菜單是使用PopupWindow組件實(shí)現(xiàn),菜單分上下兩部分,上面的菜單有返回按鈕、屏幕亮度調(diào)節(jié)按鈕和添加書簽按鈕;下面的菜單有主題選擇按鈕、搜索按鈕、書簽按鈕、目錄按鈕、字體大小調(diào)節(jié)按鈕、翻頁方式按鈕、夜間模式切換按鈕和退出軟件按鈕。
10、6.系統(tǒng)設(shè)置。系統(tǒng)設(shè)置模塊包括閱讀設(shè)置和系統(tǒng)設(shè)置。閱讀設(shè)置中有連續(xù)閱讀模式、閱讀完成時(shí)自動(dòng)歸類、閱讀休息提醒和閱讀空閑退出。連續(xù)閱讀模式:下次啟動(dòng)直接進(jìn)入上次閱讀的界面進(jìn)行繼續(xù)閱讀;閱讀完成時(shí)自動(dòng)歸類:當(dāng)書籍閱讀到最后一頁后對(duì)此書籍自動(dòng)移至“歷史閱讀”書架中;閱讀休息提醒:設(shè)置一個(gè)時(shí)間,當(dāng)用戶在閱讀頁面停留至這個(gè)時(shí)間時(shí)會(huì)彈出個(gè)提示框來提醒用戶進(jìn)行休息;閱讀空閑退出:設(shè)置一個(gè)時(shí)間,當(dāng)用戶停留在閱讀界面并且為對(duì)其未進(jìn)行任何操作至這個(gè)時(shí)間時(shí),系統(tǒng)會(huì)自動(dòng)關(guān)閉本軟件。系統(tǒng)設(shè)置中有顯示隱藏文件、使用軟件密碼、退出確認(rèn)、使用幫助和關(guān)于。顯示隱藏文件:當(dāng)用戶選擇此設(shè)置后會(huì)在下次啟動(dòng)本軟件時(shí)在文件瀏覽中顯示隱藏
11、文件;使用軟件密碼:用戶可以對(duì)此軟件進(jìn)行密碼設(shè)置;退出時(shí)確認(rèn):當(dāng)選擇此設(shè)置后,退出軟件時(shí)會(huì)顯示一個(gè)確認(rèn)框進(jìn)行退出確認(rèn),未選擇此設(shè)置時(shí)則會(huì)直接退出本軟件;使用幫助:顯示本軟件的幫助信息;關(guān)于:顯示關(guān)于本軟件的信息。本軟件的設(shè)置信息全部使用SharedPreferences存儲(chǔ)。7.使用幫助。該模塊通過讀取幫助文件在TextView中顯示,并且為TextView添加滾動(dòng)條。文件中含有本軟件的特點(diǎn)、功能介紹、操作說明等。3、功能實(shí)現(xiàn)一、客戶端1、 HomeActivity.java代碼:package activity;import interfaces.IPushData;import java.
12、util.ArrayList;import java.util.Arrays;import java.util.List;import network.ClientSocket;import adapter.ListAdapter;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.View;
13、import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListView;import com.example.wysocket.R;public class HomeActivity extends Activity implements IPushDataList<String> directorys =new ArrayList<String>();ListView mListView;ListAdap
14、ter adapter;private Handler mhandler = new Handler() Overridepublic void handleMessage(Message msg) super.handleMessage(msg); switch (msg.what) case 1:adapter.notifyDataSetChanged();break;default:break;Overrideprotected void onCreate(Bundle savedInstanceState) / TODO Auto-generated method stubsuper.
15、onCreate(savedInstanceState);setContentView(R.layout.home_activity);initView();requestServer();private void initView()mListView=(ListView) findViewById(R.id.list_home);adapter =new ListAdapter(directorys, this);mListView.setAdapter(adapter);mListView.setOnItemClickListener(new OnItemClickListener()
16、Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) String bookName=directorys.get(position);Intent intent =new Intent(HomeActivity.this,ReaderActivity.class);intent.putExtra("bookName", bookName);startActivity(intent););/* * 請(qǐng)求服務(wù)器獲取目錄 */private vo
17、id requestServer()ClientSocket client =new ClientSocket("getDiretory",this);client.start();Overridepublic void onError(Object object) / TODO Auto-generated method stubLog.d("HomeActivity", "鏈接服務(wù)器失敗");Overridepublic void onSuccess(Object object) / TODO Auto-generated met
18、hod stubString data=(String) object;List<String> temp =splitString(data);if(temp!=null)directorys.clear();for(int i=0;i<temp.size();i+)directorys.add(temp.get(i);mhandler.sendEmptyMessage(1);/* * 將目錄內(nèi)容分離成適配器所需要的數(shù)據(jù)源 * param data 服務(wù)器返回的字符串 * return 適配器所需要的數(shù)據(jù)源 */private List<String> spli
19、tString(String data)return Arrays.asList(data.split("");2、 ReaderActivity.java代碼:package activity;import com.example.wysocket.R;import interfaces.IPushData;import network.ClientSocket;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;i
20、mport android.widget.TextView;public class ReaderActivity extends Activity implements IPushDataString bookName;String custormString ="_wy"/用于服務(wù)器對(duì)請(qǐng)求參數(shù)的判斷String bufString ;/緩存的字符串private Handler mhandler = new Handler() Overridepublic void handleMessage(Message msg) super.handleMessage(msg);
21、 switch (msg.what) case 1:tvContent.setText(bufString);break;default:break;private TextView tvContent;Overrideprotected void onCreate(Bundle savedInstanceState) / TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.reader_activity);bookName=getIntent().getString
22、Extra("bookName");bookName=bookName+custormString;initView();reqeustServer();private void initView() / TODO Auto-generated method stubtvContent=(TextView) findViewById(R.id.tv_content);private void reqeustServer()ClientSocket socket =new ClientSocket(bookName, this);socket.start();/* * 這里獲
23、取得到bufString為8k,在服務(wù)端自定義返回字節(jié)的大小, * 根據(jù)自己的分頁思路來做吧。 */Overridepublic void onSuccess(Object object) / TODO Auto-generated method stubbufString=(String) object;mhandler.sendEmptyMessage(1);/* * */Overridepublic void onError(Object object) / TODO Auto-generated method stub3、IPushData.java代碼:package interfa
24、ces;/* * 回調(diào)接口。 * author Wy。 * */public interface IPushData void onSuccess(Object object);void onError(Object object);4、 ClientSocket.java代碼:package network;import interfaces.IPushData;import java.io.IOException;import .Socket;import .UnknownHostException;import android.R.integer;import util.FileUtil
25、s;/* * 連接服務(wù)器的Socket,只是簡(jiǎn)單的根據(jù)不同的請(qǐng)求參數(shù),獲取不同的String。 * author Wy。 * */public class ClientSocket extends Thread Socket socket;final static String IP="9" /本機(jī)IP地址,使用模擬器就用。final static int port =56565; /服務(wù)器的端口。FileUtils fileUtils; /操作Socket流。String requestParam; /請(qǐng)求參數(shù)。IPushData
26、iPushData; /回調(diào)接口。public ClientSocket(String requestParams,IPushData i) this.requestParam=requestParams;iPushData=i;fileUtils=new FileUtils();Overridepublic void run() try Socket socket =new Socket(IP,port);/先添加請(qǐng)求參數(shù)。fileUtils.outPut(socket, requestParam);/獲取服務(wù)器返回的字符串。String dataString=fileUtils.Input
27、(socket);/關(guān)閉Socket的流。fileUtils.closeSocket();/回調(diào)。iPushData.onSuccess(dataString); catch (UnknownHostException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();5、FileUtils.java代碼:package util;import java.io.BufferedInp
28、utStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import .Socket;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/* * 封裝操縱Socket的輸入輸出流。 * author Wy。 * */public class FileUtils Ou
29、tputStream outputStream=null;BufferedOutputStream bufferedOutputStream=null;InputStream InputStream=null;BufferedInputStream bufferedInputStream=null;/* * 鏈接的Socket,要發(fā)送的內(nèi)容。 * param socket * param content */public void outPut(Socket socket,String content)try outputStream = socket.getOutputStream();bu
30、fferedOutputStream=new BufferedOutputStream(outputStream);byte temp =content.getBytes("GB2312");System.out.println(content);bufferedOutputStream.write(temp);bufferedOutputStream.flush();/記得刷新,不然寫不了內(nèi)容的。 catch (IOException e) / TODO Auto-generated catch blockSystem.out.println(e.getMessage()
31、;/* * 當(dāng)客戶端讀寫完畢的時(shí)候,調(diào)用關(guān)閉流。 */public void closeSocket()try if(InputStream!=null)InputStream.close();if(bufferedInputStream!=null)bufferedInputStream.close();if(outputStream!=null)outputStream.close();if(bufferedOutputStream!=null)bufferedOutputStream.close(); catch (Exception e2) System.out.println(e2.
32、getMessage();/* * 獲取該Socket鏈接對(duì)象,發(fā)送過來的內(nèi)容。 * param socket * return */public String Input(Socket socket)try InputStream = socket.getInputStream();bufferedInputStream=new BufferedInputStream(InputStream);/8k的緩存byte data =new byte1024*8;int len=bufferedInputStream.read(data);String temp=new String(data,0
33、,len,"GB2312");return temp; catch (IOException e) / TODO Auto-generated catch blockSystem.out.println(e.getMessage();return "讀取錯(cuò)誤"二、服務(wù)器端1、CutContentThread.java代碼:package servers;import java.io.File;import java.io.IOException;import java.io.UnsupportedEncodingException;import .Soc
34、ket;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import util.BufferedRandomAccessFile;import util.FileUtils;/* * 截取文件內(nèi)容并發(fā)送給客戶端 * author Wy * */public class CutContentThread extends ThreadSocket socket=null;String bookPath;long pos=0;/文件指針BufferedRandomAccessFile reader;Fi
35、leUtils fileUtils ;public CutContentThread(Socket socket,String bookPath,long pos) this.socket=socket;this.bookPath=bookPath;this.pos=pos;fileUtils=new FileUtils(); File file =new File(bookPath); try reader =new BufferedRandomAccessFile(file,"r"); catch (IOException e) / TODO Auto-generate
36、d catch blockSystem.out.println(e.getMessage();Overridepublic void run() String content=sendChapter();fileUtils.outPut(socket, content);private String sendChapter() long currentIndex =pos;/文件指針,操縱文件指針來讀取文件try reader.seek(currentIndex);/一次讀8k,根據(jù)分頁思路自定義大小byte buf = new byte1024*8; int len = 0; len = r
37、eader.read(buf,0,buf.length) ; String contentString=new String(buf, 0, len,"gbk"); System.out.println(contentString); return contentString; catch (IOException e) / TODO Auto-generated catch blockSystem.out.println(e.getMessage();return "" 2、DirectoryThread.java代碼:package servers;
38、import java.io.File;import java.io.IOException;import java.io.UnsupportedEncodingException;import .Socket;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import util.FileUtils;/* * 發(fā)送目錄的線程 * * author Wy * */public class DirectoryThread extends Thread FileUtils fileUtils = nu
39、ll;Socket socket = null;String directory; / 文件目錄public DirectoryThread(Socket socket, String directoryPath) this.socket = socket;fileUtils = new FileUtils();directory = directoryPath;/* * 獲取文件名 */Overridepublic void run() String data=getFileName(".txt");fileUtils.outPut(socket, data);/* *
40、獲取文件目錄下的文件名 * * param filePath * return */private List<String> getDiretory(String filePath) List<String> files = new ArrayList<>();File file = new File(filePath);if (file.isDirectory() files = Arrays.asList(file.list();return files;/* * 獲取不帶后綴的文件,只匹配相應(yīng)的后綴名 * param houzhui 后綴名,如&quo
41、t;.txt" * return 字符串 "西游記;紅樓夢(mèng);" */private String getFileName(String houzhui) List<String> files = new ArrayList<>();files = getDiretory(directory);StringBuffer stringBuffer = new StringBuffer();for (String s : files) String temp = s.substring(s.length() - 4, s.length();if
42、(temp.equals(houzhui) stringBuffer.append(s.substring(0, s.length() - 4) + "");String temp = stringBuffer.toString();return temp;3、ConnectServer.java代碼:package socketserver;import java.io.IOException;import .ServerSocket;import .Socket;import .SocketException;import java.util.ArrayList;imp
43、ort servers.CutContentThread;import servers.DirectoryThread;import util.FileUtils;public class ConnectServer extends Threadstatic final String reader="_wy"static long pos=0;/文件指針/public FileUtils fileUtils=null;/ServerSocket serverSocket=null;/public ConnectServer() public static void main
44、(String args) throws IOException System.out.println(".服務(wù)器已經(jīng)啟動(dòng).正在監(jiān)聽客戶端信息");ServerSocket serverSocket =new ServerSocket(56565);/FileUtilsfileUtils=new FileUtils();while(true)try /監(jiān)聽,阻塞主線程Socket socket=serverSocket.accept();System.out.println("客戶端IP ->"+socket.getInetAddress().ge
45、tHostAddress();/判斷根據(jù)上傳的內(nèi)容,知道Sokect需要做什么chooseThread(socket);/chooseThread(socket); catch (IOException e) / TODO Auto-generated catch blockSystem.out.println(e.getMessage();private static void chooseThread(Socket socket)String bookName=""String updateString=""FileUtils fileUtils=n
46、ew FileUtils();updateString=fileUtils.Input(socket);System.out.println("updateString ->"+updateString);if(updateString.substring(updateString.length()-3,updateString.length().equals(reader)bookName=updateString.substring(0,updateString.length()-3)+".txt"updateString="getB
47、ookContent"switch (updateString) case "getDiretory":DirectoryThread thread= new DirectoryThread(socket, "E:/book");thread.start();break;case "getBookContent":String bookPath="E:/book/"+bookName;CutContentThread cutContentThread =new CutContentThread(socke
48、t, bookPath, 0);cutContentThread.start();break;default:fileUtils.outPut(socket, "請(qǐng)求參數(shù)不對(duì)");break;4、Client.java代碼:package util;import java.io.IOException;import .Socket;import java.util.Arrays;import java.util.List;/* * 客戶端測(cè)試類 * author Administrator * */public class Client private static Lis
49、t<String> splitString(String data)return Arrays.asList(data.split("");public static void main(String args) try /測(cè)試獲取文件目錄Socket socket =new Socket("", 56565);FileUtils fileUtils=new FileUtils();fileUtils.outPut(socket, "getDiretory");List<String> tem
50、p =splitString(fileUtils.Input(socket);System.out.println(temp.toString();fileUtils.closeSocket();/測(cè)試獲取文件目錄下的書Socket socket2 =new Socket("", 56565);fileUtils.outPut(socket2,(temp.get(6)+"_wy");System.out.println(fileUtils.Input(socket2); catch (IOException e) / TODO Auto-generated catch blockSystem.out.println(e.getMessage();5、FileUtils.java代碼:package util;import java.i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度澳大利亞大學(xué)本碩連讀合同
- 二零二五年度勞動(dòng)合同解除協(xié)議
- 二零二五年度農(nóng)村合作社鄉(xiāng)村旅游開發(fā)合作協(xié)議
- 鏟車勞務(wù)承包合同鏟車合同書
- 社交網(wǎng)絡(luò)運(yùn)營(yíng)合作合同
- 公司內(nèi)外部往來文書規(guī)范手冊(cè)
- 小熊維尼的友情世界讀后感
- 生物技術(shù)在農(nóng)村綜合利用項(xiàng)目協(xié)議
- 新能源汽車充電站投資協(xié)議
- 企業(yè)數(shù)字化轉(zhuǎn)型解決方案手冊(cè)
- 大學(xué)數(shù)學(xué)《概率論與數(shù)理統(tǒng)計(jì)》說課稿
- 深大基坑設(shè)計(jì)施工關(guān)鍵技術(shù)孫加齊
- 《神經(jīng)外科常見疾病》課件
- DL-T5707-2014電力工程電纜防火封堵施工工藝導(dǎo)則
- 職業(yè)素養(yǎng)提升第2版(大學(xué)生職業(yè)素養(yǎng)指導(dǎo)課程)全套教學(xué)課件
- 西師版小學(xué)數(shù)學(xué)六年級(jí)下冊(cè)單元測(cè)試卷(含答案)
- 2024年公安機(jī)關(guān)理論考試題庫500道【綜合卷】
- 2024年四川成都市公共交通集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 第2章導(dǎo)游(課件)《導(dǎo)游業(yè)務(wù)》(第五版)
- 2023年北京重點(diǎn)校初二(下)期中數(shù)學(xué)試卷匯編:一次函數(shù)
- 加推樓盤營(yíng)銷方案
評(píng)論
0/150
提交評(píng)論