#1
  1. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Aug 2012
    Posts
    1
    Rep Power
    0

    File transfer from Client to Server side


    Hello , I am new to devshed forums. Please guide me with the following problem. I have Server and Client java files. Client sends a file to Server, Server receives it and saves in the present working directory of Server java file. How to change the target directory in Server from current working directory? Here is my code :

    Server.java
    Code:
    import java.io.FileOutputStream;  
    import java.io.ObjectInputStream;  
    import java.io.ObjectOutputStream;  
    import java.net.ServerSocket;  
    import java.net.Socket;  
      
    public class Server extends Thread {  
        public static final int PORT = 3332;  
        public static final int BUFFER_SIZE = 100;  
      
        @Override  
        public void run() {  
            try {  
                ServerSocket serverSocket = new ServerSocket(PORT);  
      
                while (true) {  
                    Socket s = serverSocket.accept();  
                    saveFile(s);  
                }  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
      
        private void saveFile(Socket socket) throws Exception {  
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());  
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());  
            FileOutputStream fos = null;  
            byte [] buffer = new byte[BUFFER_SIZE];  
      
            // 1. Read file name.  
            Object o = ois.readObject();  
      
            if (o instanceof String) {  
                fos = new FileOutputStream(o.toString());  
            } else {  
                throwException("Something is wrong");  
            }  
      
            // 2. Read file to the end.  
            Integer bytesRead = 0;  
      
            do {  
                o = ois.readObject();  
      
                if (!(o instanceof Integer)) {  
                    throwException("Something is wrong");  
                }  
      
                bytesRead = (Integer)o;  
      
                o = ois.readObject();  
      
                if (!(o instanceof byte[])) {  
                    throwException("Something is wrong");  
                }  
      
                buffer = (byte[])o;  
      
                // 3. Write data to output file.  
                fos.write(buffer, 0, bytesRead);  
                
            } while (bytesRead == BUFFER_SIZE);  
              
            System.out.println("File transfer success");  
              
            fos.close();  
      
            ois.close();  
            oos.close();  
        }  
      
        public static void throwException(String message) throws Exception {  
            throw new Exception(message);  
        }  
      
        public static void main(String[] args) {  
            new Server().start();  
        }  
    }
    Client.java
    Code:
    import java.io.File;  
    import java.io.FileInputStream;  
    import java.io.ObjectInputStream;  
    import java.io.ObjectOutputStream;  
    import java.net.Socket;  
    import java.util.Arrays;  
    import java.lang.*;  
    import java.util.Scanner;  
      
      
    public class Client {  
        public static void main(String[] args) throws Exception {  
            String fileName = null;  
      
           try {  
                fileName = args[0];  
            } catch (Exception e) {  
            System.out.println("Enter the name of the file :");  
            Scanner scanner = new Scanner(System.in);  
            String file_name = scanner.nextLine();  
               
            File file = new File(file_name);  
            Socket socket = new Socket("localhost", 3332);  
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());  
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());  
      
            oos.writeObject(file.getName());  
      
            FileInputStream fis = new FileInputStream(file);  
            byte [] buffer = new byte[Server.BUFFER_SIZE];  
            Integer bytesRead = 0;  
      
            while ((bytesRead = fis.read(buffer)) > 0) {  
                oos.writeObject(bytesRead);  
                oos.writeObject(Arrays.copyOf(buffer, buffer.length));  
            }  
      
            oos.close();  
            ois.close();  
            System.exit(0);      
    }  
      
    }  
      
    }
  2. #2
  3. Contributing User
    Devshed Expert (3500 - 3999 posts)

    Join Date
    Aug 2010
    Location
    Eastern Florida
    Posts
    3,711
    Rep Power
    347
    How to change the target directory in Server from current working directory
    Add in the path you want when you create the FileOutputStream object to write the file.

    fos = new FileOutputStream(<DESIRED PATH HERE>+o.toString())

IMN logo majestic logo threadwatch logo seochat tools logo