2013-12-08 4 views
0

TCP-Sock 프로그램을 만들려고하는데 이는 간단한 파일 수신 프로그램입니다. 그리고 지금, 나는 약간 문제를 얻는다.android : FileOutputStream이 작동하지 않습니다.

내 클라이언트 프로그램의 FileOutputStream 클래스가 작동하지 않는다고 생각합니다.

아래 코드는 내가 작성한 것입니다.

package kr.ac.cbnu.incping.tcp_cloud; 

public class DownActivity extends Activity { 
public static int contentNum; 
public static String body=new String(); 
public static String fName=new String(); 
public static int fSize; 



public static synchronized String getFilePath(String userID, String fName) 
{ 
    String sdcard = Environment.getExternalStorageState(); 
    File file = null; 

    if (!sdcard.equals(Environment.MEDIA_MOUNTED)) 
    { 
     // SDcard isn't mount 
     file = Environment.getRootDirectory(); 
    } 
    else 
    { 
     // SDcard is mount 
     file = Environment.getExternalStorageDirectory(); 
    } 


    String dir = file.getAbsolutePath() + String.format("/tcp_cloud/%s",userID); 
    String path = file.getAbsolutePath() + String.format("/tcp_cloud/%s/%s",userID,fName); 

    file = new File(dir); 
    if (!file.exists()) 
    { 
     // Make directory if dir doesn't exist 
     file.mkdirs(); 
    } 

    // return File Path; 
    return path; 
} 

public void connect() 
{ 
    try{ 

     Socket socket=new Socket(MainActivity.servIP, MainActivity.servPort); 

     DataOutputStream dos; 
     DataInputStream dis; 

     dis=new DataInputStream(socket.getInputStream()); 
     dos=new DataOutputStream(socket.getOutputStream()); 

     byte[]flag=new byte[3]; 
     byte[]num=new byte[1]; 
     byte[]uID=new byte[17]; 

     String path=new String(); 
     path=getFilePath(LoginActivity.usrName,fName); 
     File f=new File(path); 




     flag="05".getBytes("EUC_KR"); 
     num=Integer.toHexString(contentNum).getBytes("EUC_KR"); 
     uID=LoginActivity.usrName.getBytes("EUC_KR"); 


     dos.write(flag); 
     dos.flush(); 
     dos.write(num); 
     dos.flush(); 
     dos.write(uID); 
     dos.flush(); 


     FileOutputStream fos=new FileOutputStream(f); 
     Toast.makeText(getApplicationContext(),path,Toast.LENGTH_LONG).show(); 
     BufferedOutputStream bos=new BufferedOutputStream(fos); 
     dos=new DataOutputStream(bos); 


     int len; 
     int size = 512; 
     byte[] data = new byte[size]; 


     while ((len = dis.read(data,0,size))!=-1) 
     { 
      dos.write(data); 
     } 
     dos.flush(); 
     Toast.makeText(getApplicationContext(),path+" saved",Toast.LENGTH_LONG).show(); 
     dos.close(); 
     bos.close(); 
     fos.close(); 





     dos.close(); 
     dis.close(); 
     socket.close(); 

    }catch (Exception e){ 
     e.printStackTrace(); 
    } 
} 




protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_down); 
    String title=new String(); 

    if(contentNum==0) 
     title=LoginActivity.title1; 
    else if(contentNum==1) 
     title=LoginActivity.title2; 
    else if(contentNum==2) 
     title=LoginActivity.title3; 
    else if(contentNum==3) 
     title=LoginActivity.title4; 
    else if(contentNum==4) 
     title=LoginActivity.title5; 

    TextView bodytit=(TextView) findViewById(R.id.bodyTitle); 
    TextView bodydat=(TextView) findViewById(R.id.bodyBody); 
    Button filedat=(Button) findViewById(R.id.filename); 

    bodytit.setText(title); 
    bodydat.setText(body); 
    filedat.setText(fName+"(size: "+fSize+")"); 

    filedat.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v){ 
      connect(); 

     } 
    }); 



}} 

은이 코드는 토스트 메시지는 단지 메시지를 prob는있다

FileOutputStream fos=new FileOutputStream(f); Toast.makeText(getApplicationContext(),path,Toast.LENGTH_LONG).show(); BufferedOutputStream bos=new BufferedOutputStream(fos); dos=new DataOutputStream(bos);

문제가 코드를합니다. FOS의 위에 토스트를 놓았을 때, 잘 작동하는 건배. 토스트가 해당 위치에서 작동하지 않습니다.

이 문제를 해결할 수 없습니다. 제발, 누군가 도와주세요 .TT

* 나는 언어 분야의 사람들이다. 그래서 제 영어는 좋은 문장이 아닙니다. 죄송합니다;)

+0

'토스트 (toast)'라는 메시지가 나타나나요? – alex

+0

FOS 위에 놓으면 "/mnt/sdcard/tcp_cloud/rggf/000_IMG_0593.JPG" – user3079724

+0

rggf = userID로 표시되며 해당 코드 (fos-taost-bos-)를 사용하면 아무 일도 일어나지 않습니다. 축배가 나타나지 않습니다 – user3079724

답변

0

내 경우에는 FileOutputStream 및 OutputStreamWriter가 작동하지 않습니다.

그래서 파일 클래스가 변경되었습니다.

FileWriter fileOut = new FileWriter(fileFullPath, false); 
     String jsonString = new Gson().toJson(json); 
     fileOut.write(jsonString); 
     fileOut.close(); 
관련 문제