Ciao a tutti,
sono qui a chiedervi una cosa che probabilmente sarà una stupidaggine ma mi sta facendo impazzire, sto scrivendo 2 programmini, il primo il client deve inviare un file al secondo (il server) che lo deve mettere in una cartella predefinita. Il problema ce l'ho nel server perchè una volta arrivati ricevuti il nome e la lunghezza del file quando vado a tentare di aprirlo (cioè crearlo) mi spunta fuori l'eccezione che non riesco a comprendere. Vi posto il codice del server e del client che non sono completi ma già a questo stadio si presenta l'eccezione nel server:
codice:
import java.net.*;
import java.io.*;
/*
* Server che riceve file che arrivano da client2 e li memorizza in una
* cartella specifica.
* /home/jacopo/Scaricati/hello.c
*/
/**
*
* @author jacopo
*/
public class Server2 {
public static void main(String[] args) throws FileNotFoundException, IOException {
ServerSocket ss = new ServerSocket(8080);
// Creo il Socket su cui ricevo le connessioni
Socket s = ss.accept();
System.out.println("Connessione stabilita");
// Creo un flusso di input per leggere il nome del file
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
String namef = in.readLine();
System.out.println("Nome file = " + namef);
// Creo un canale di input per leggere le dimensione poichè non riesco a farlo
// tramite il precedente XD
DataInputStream ind = new DataInputStream(s.getInputStream());
// Leggo la dimensione.
int dim = ind.readInt();
System.out.println("Dimensione file = " + dim);
byte[] buffer = new byte[dim];
String path = "/home/jacopo/NetBeansProjects/Tcp/" + namef;
System.out.println("Nome file = " + path);
File file = new File(path);
FileInputStream fis = new FileInputStream(file);
// Chiudo canali e socket
ind.close();
in.close();
s.close();
ss.close();
}
}
Client:
codice:
import java.net.*;
import java.io.*;
/*
* Richiede il path di un file e lo invia al server2 che lo salava in una
* cartella predefinita.
* /home/jacopo/Scaricati/hello.c
*/
/**
*
* @author jacopo
*/
public class Client2 {
public static void main(String[] args) throws UnknownHostException, IOException {
String path;
System.out.println("Inserisci il nome del file completo di path: ");
path = Read.readString();
Socket s = new Socket("localhost", 8080);
File file = new File(path);
FileInputStream fin = new FileInputStream(file);
DataInputStream in = new DataInputStream(fin);
byte[] buffer = new byte[in.available()];
System.out.println("Byte: " + buffer.length);
in.readFully(buffer);
DataOutputStream out = new DataOutputStream(s.getOutputStream());
BufferedReader inr = new BufferedReader(new InputStreamReader(s.getInputStream()));
out.writeChars(file.getName() + "\n");
out.flush();
System.out.println("Nome inviato");
out.writeInt(buffer.length);
out.flush();
String line = inr.readLine();
System.out.println("E' pronto?... " + line);
/*if(line.equals("Ready")) {
out.write(buffer, 0, buffer.length);
out.flush();
}*/
System.out.println("File inviato con successo");
in.close();
out.close();
fin.close();
s.close();
}
}
Ho notato che se specifico il path manualmente cioè scrivendo direttammente ad es:
codice:
File file = new File("/home/jacopo/qualcosa/.../file.ext");
FileInputStream fis = new FileInputStream(file);
tutto funziona perfettamente mentre se gli passo una variabile di tipo stringa con dentro il path mi tira fuori l'eccezione che vi posto qui di seguito:
Connessione stabilita
Nome file = hello.c
Dimensione file = 106
Nome file = /home/jacopo/NetBeansProjects/Tcp/hello.c
Exception in thread "main" java.io.FileNotFoundException: /home/jacopo/NetBeansProjects/Tcp/hello.c (Is a directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.jav a:137)
at Server2.main(Server2.java:36)
Java Result: 1
COSTRUITO CON SUCCESSO (tempo totale: 17 secondi)
Ho provato tutti i possibili modi per creare il file cambiando fra più metodi ma sempre qui torno e non so come uscirne aiutatemi per favore.
Grazie per l'attenzione