Skip to main content

File transfer from Client to Server side

No replies
highlander141
Offline
Joined: 2012-08-29
Points: 0

Hello , I am new to java.net 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

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

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);     

 

 
}