Buongiorno.
Ho un problema durante il trasferimento di un file presente sulla sd del mio dispositivo android dal dispositivo stesso al mio server (il mio pc) tramite comunicazione socket.
Quello che faccio lato server è la seguente cosa:
1
2private final String SAVE_DIR = "C:/Users/Alberto/Documents";
3private final int SERVER_PORT = 4444;
4ServerSocket ss = new ServerSocket(SERVER_PORT);
5System.out.println("Sono sulla " + ss);
6
7// ciclo infinito per accettare per sempre connessioni
8for (;;) {
9// prendo la connessione in ingresso
10Socket s = ss.accept();
11System.out.println("Conessione da " + s);
12
13
14try {
15
16BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
17String str = in.readLine();
18
19if("TI INVIO LE QUANTITA COMPERATE".equals(str)){
20System.out.println("S: CLIENT DICE: '" + str + "'");
21//RICEZIONE NELLA CARTELLA DI LAVORO DEL FILE QUANTITATOSERVER.xml DAL
22//DISPOSITIVO MOBILE
23
24ObjectInputStream oin = new ObjectInputStream(s.getInputStream());
25File inFile = (File) oin.readObject();
26File saveFile = new File(SAVE_DIR + "/" + inFile.getName());
27FileInputStream fis = new FileInputStream(inFile);
28FileOutputStream fos = new FileOutputStream(saveFile);
29byte[] buf = new byte[1024];
30int i = 0;
31// riga per riga leggo il file originale per
32// scriverlo nello stram del file destinazione
33while((i=fis.read(buf))!=-1) {
34fos.write(buf, 0, i);
35}
36// chiudo gli strams
37fis.close();
38fos.close();
39
40System.out.println(" --ricezione completata");
41
42
43}//Fine IF TI INVIO LE QUANTITA COMPERATE
44
Lato android invece lancio un thread all'istante che mi serve per inviare il file al dispositivo:
431
2public class TCPClientQuantita implements Runnable {
3
4private final String SERVER_HOST = "192.168.0.107";
5private final int SERVER_PORT = 4444;
6
7
8public void run() {
9try {
10
11try {
12
13Socket socket = null;
14socket = new Socket(SERVER_HOST, SERVER_PORT);
15String message = "TI INVIO LE QUANTITA COMPERATE";
16PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
17out.println(message);
18
19File sdcardDir = Environment.getExternalStorageDirectory();
20
21File myFile = new File(sdcardDir,"QUANTITATOSERVER.xml");
22ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
23oos.reset();
24oos.writeObject(myFile);
25oos.flush();
26oos.close();
27
28Log.d("TCP", "C: Sent.");
29Log.d("TCP", "C: Done. DATI INVIATI!");
30
31
32
33
34} catch(Exception e) {
35Log.e("TCP", "S: Error", e);
36}
37} catch (Exception e) {
38Log.e("TCP", "C: Error", e);
39}
40
41
42}//chiusura metodo run
43
L'eccezione che mi capita è la seguente:
java.io.FileNotFoundException: \mnt\sdcard\QUANTITATOSERVER.xml (Impossibile trovare il percorso specificato)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at Server.listen(Server.java:131)
at Server.main(Server.java:44)
dove
at Server.listen(Server.java:131) -------------> FileInputStream fis = new FileInputStream(inFile);
Il file è presente correttamente sulla sd.
Non capisco il perchè mi generi questa eccezione.
E' una giornata intera che ci sto sclerando sopra ma proprio non ne vengo fuori.
Vi ringrazio ciao