黑馬程式設計師 Java 學習筆記

2021-07-02 00:19:02 字數 2262 閱讀 3942

filewriter

建立乙個filewriter物件,該物件一被初始化就必須明確被操作的檔案,而且該檔案會被建立到指定的目錄下。如果該目錄下已有同名檔案,將被覆蓋。

下面的例子是將客戶端的檔案拷貝到伺服器上:

客戶端:

socket s =newsocket("1.1.1.1",10000);//定義客戶端的套接字

bufferedreaderbf =newbufferedreader(newfilereader("client.txt"));//將要傳的檔案封裝到bf中

printwriterout =newprintwriter(s.getoutputstream(),true);//定義乙個向服務端寫檔案的物件           

stringline =null;

while((line=bf.readline())!=null){

out.println(line);

bufferedreaderbufin =newbufferedreader(newinputstreamreader(s.getinputstream()));

stringstr = bufin.readline();

system.out

.println(str);

bf.close();

s.close();

伺服器端:

serversocket ss =newserversocket(10000);

sockets =ss.accept();

bufferedreaderbf =newbufferedreader(newinputstreamreader(s.getinputstream()));

printwriterout =newprintwriter(newfilewriter("server.txt"));

stringline =null;

while((line=bf.readline())!=null){

out.println(line);             

printwriterpc =newprintwriter(s.getoutputstream(),true);

pc.println("上傳

成功");

bf.close();

s.close();

ss.close();

但如果執行就會發現無論是客戶端還是伺服器端都不能結束,總會一直停留在那裡。原因不難發現是因為伺服器端迴圈處不知道客戶端檔案已經傳送完畢,所以就會一直等著客戶端傳送,也同樣不會給客戶端傳送「上傳成功」,所以客戶端也會停在那裡等著伺服器端傳送上傳成功的訊息。

解決這個問題就是要讓伺服器端知道客戶端迴圈已經結束。我們可以自定義結束標記,      

客戶端:

dataoutputstream dos =newdataoutputstream(s.getoutputstream());

longtime = system.currenttimemillis();

dos.writelong(time);

string line =null;

while((line=bf.readline())!=null){

out.println(line);

dos.writelong(time);

告訴伺服器端第一次收到的time是結束標記,下次收到該time時就是結束。伺服器端我們做個判斷:當第二次收到time時就結束迴圈。這樣做雖然也可以結束但比較麻煩,要定義許多流。

方式二:api中也提供了另外一種結束標記,用s.shutdownoutput();關閉客戶端輸出流。相當於與給客戶端**結束標記-1。這樣伺服器端就不需要修改什麼程式依然可以結束。

黑馬程式設計師 java學習筆記 介面

介面 inte ce 初期理解,可以認為是乙個特殊的抽象類 當抽象類中的方法都是抽象的,那麼該類可以通過介面的形式來表示 class用於定義類 inte ce用於定義介面 介面定義時,格式特點 1介面中常見定義 常量 抽象方法。2介面中的成員都有固定修飾符。常量 public static fina...

黑馬程式設計師 JAVA學習筆記2

asp.net android ios開發 net培訓 期待與您交流!詳細請檢視 介面中的成員變數都是publci 的static 的和final 的。介面中的方法都是 public 的。單例模式 表示乙個類只會生成唯一的乙個物件。怎樣才能乙個類只會生成乙個物件呢 首先其構造方法是不應該被外界訪問的...

黑馬程式設計師 java學習筆記 列舉

假設用1 7分別表示星期一到星期日,一般0表示星期日 6表示星期六 但有人可能會寫成int weekday 0 或即使使用常量方式也無法阻止意外。列舉就是要讓某個型別的變數的取值只能為若干個固定值中的乙個,否則,編譯器就會報錯。列舉可以讓編譯器在編譯時就可以控制源程式中填寫的非法值,普通變數的方式在...