2012-07-18 65 views
1

我送從Java客戶端程序的請求,Servlet的像發送下面,讀取一個文件,字符串,整數從由servlet的Java客戶端

URL url = new URL("http://localhost:8080/TestWebProject/execute"); 
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection(); 
httpCon.setDoOutput(true); 
httpCon.setRequestMethod("POST"); 

DataOutputStream out = new DataOutputStream(httpCon.getOutputStream()); 
out.writeUTF("hello"); 
out.writeUTF("World"); 

ByteArrayOutputStream bos; 
File baseFile = new File("C:\\Users\\jp\\Desktop\\mdn.txt"); 

if (!baseFile.exists()) 
{ 
    System.out.println("File Not Found Correctly"); 
} 

FileInputStream fis = new FileInputStream(baseFile); 

byte[] fileBytes = new byte[1024]; 
bos = new ByteArrayOutputStream(); 

while (true) 
{ 
    int ch = fis.read(fileBytes); 

    if (ch != -1) 
    { 
     bos.write(fileBytes, 0, ch); 
    } 
    else 
    { 
     break; 
    } 
} 
bos.close(); 
fis.close(); 

out.write(bos.toByteArray()); 

out.writeInt(10); 

out.close(); 



* ** * * * * ** *SERVLET SIDE* ** * ** * ** *

InputStream is = (InputStream) req.getInputStream(); 

DataInputStream dis = new DataInputStream(is); 
System.out.println("NAME US :" + dis.readUTF()); 
System.out.println("NAME US 1:" + dis.readUTF()); 

File f = new File("D:\\temp2.txt"); 
f.createNewFile(); 

FileOutputStream fos = new FileOutputStream(f); 

byte[] fileBytes = new byte[1024]; 
ByteArrayOutputStream bos = new ByteArrayOutputStream(); 

while (true) 
{ 
    int ch = dis.read(fileBytes); 

    if (ch != -1) 
    { 
     bos.write(fileBytes, 0, ch); 
    } 
    else 
    { 
     break; 
    } 
} 
fos.write(bos.toByteArray()); 

System.out.println(dis.readInt()); 

我得到輸出 你好 世界 同樣的文件被成功複製到提到的位置temp2.​​txt

我在System.out.println(dis.readInt())中遇到問題;當EOF達到時。

我在哪裏做錯了,以及如何從DataInputStream中讀取數據。

謝謝。

+0

錯誤堆棧跟蹤信息,請 – 2012-07-18 07:17:05

+0

java.io.EOFException的 \t在java.io.DataInputStream中.readInt(DataInputStream.java:375) \t at TestServlet.doPost(TestServlet.java:59) \t at javax.servlet.http.HttpServlet.service(HttpServlet.j AVA:637) \t在javax.servlet.http.HttpServlet.service(HttpServlet.java:717) \t在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) \t在org.apache .catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) \t at – Jayesh 2012-07-18 07:59:53

+0

您可以編輯帖子以添加更多詳細信息。不要粘貼錯誤,代碼註釋 – 2012-07-18 08:53:46

回答

0

您的循環循環,直到您的流爲空,然後退出循環。但是之後你會嘗試再次從流中讀取,這是空的,而你正在到達eof。 你想打印到sysout的數據是什麼?

編輯

您可以直接寫信給你FileOutputStream和重寫你的循環是這樣的:

FileOutputStream fos=new FileOutputStream(f); 

byte[] fileBytes=new byte[1024]; 
int ch; 

while(((ch = dis.read(fileBytes)) != -1) { 
    fos.write(fileBytes,0,ch); 
} 
+0

我想發送像這樣的數據 DataOutputStream out = new DataOutputStream(con.getOutputStream()); out.writeUTF(「Hello」); out.write(bytes)//在這裏,我將File dat寫入Byte數組。 out.writeUTF(「World」); 現在,我想在Servlet Side讀取相同的內容。 我能讀取 DataInputStream dis = new DataInputStream(is); System.out.println(「NAME US:」+ dis.readUTF()); dis。read()// System.out.println(「NAME US 1:」+ dis.readUTF()); 我能夠讀取第一個UTF和第二個寫入文件。 問題出現在第三次讀取UTF,因爲它給EOF異常。 如何在這種情況下讀取數據? 謝謝 – Jayesh 2012-07-18 07:54:48

+0

我正在讀這樣的文件 \t \t DataInputStream dis = new DataInputStream(is); System.out.println(「NAME US:」+ dis.readUTF()); System.out.println(「NAME US 1:」+ dis.readUTF()); \t \t File f = new File(「D:\\ temp2.​​txt」); \t \t f.createNewFile(); \t \t FileOutputStream fos = new FileOutputStream(f); \t \t byte [] fileBytes = new byte [1024]; \t \t ByteArrayOutputStream bos = new ByteArrayOutputStream(); \t \t而(真){ \t \t \t INT CH = dis.read(fileBytes); \t \t \t如果(CH = - 1!){ \t \t \t \t bos.write(fileBytes,0,CH); \t \t \t} else { \t \t \t \t break; \t \t \t} \t \t} \t \t fos.write(bos.toByteArray()); – Jayesh 2012-07-18 07:55:10