Writing a Full Stack File Content System in Java
Tags: java, programming, server, fullstack
Published: 2021-02-19 21:30:08

So we will be making both the Client Side and Server Side which asks the user for the name of file they want to search for and shows them the contents of that file. 
So the client requests the server to send the file contents by supplying the file name. The server has some number of files. From the existing files, the server opens the requested file and the client displays the file name with the file content or basically create a **Remote File Content Display System **. 

## Analysis 
When you keep this term - Remote File  Content Display System aside and just think about the problem we find out that the system just requires a Server and a Client program that manage the backend and frontend respectively while we use sockets to integrate both .

After further analysis and most importantly breaking down the problem, this is what I believe each system should do to solve the problem :-

### Server Side :
 
- It must start a new Server Socket instance on a local port . 
-  It should know the location of the directory where it will search for the user provided file.
- It must get all the files in the current directory into a list to make the searching easier . 
- It must then search for the file linearly and if found it must use BufferedReaders and FileReaders 
   to read the content and send it to the client using Output Streams else just send that there is no 
   such file .

### Client Side :

- It must start a  Socket on the same port as the Server’s socket to connect with it .
- It should ask the user for the name of the file he/she wants to search for and send that to the 
   server through the Output Stream .
- It must start a Output stream to send the file name to the server.
- Then it needs to start a new data input stream to get the data that the server returns and display 
   it to the client/user .
- At last it need to close the socket .

## Flow of the System

![java client server file system](https://cdn.hashnode.com/res/hashnode/image/upload/v1613764710750/XpLcFwTx6.png)

## Let's Write the Server :

```

import java.io.*;
import java.net.*;
public class Server {
  public static void main(String[] args) {
    try {
      ServerSocket ss = new ServerSocket(6666);                     //Creating the Server Socker Instance
      Socket s = ss.accept();                                       //Establishes Connection
      System.out.println("Server is up and running..");
      DataInputStream dis = new DataInputStream(s.getInputStream());  //Get's data from Client
      String  fileName = (String)dis.readUTF();                            //Converting to String
      fileName = fileName + ".txt";
      File folder = new File( "C:/Users/Saumya/Desktop/JavaProject/AllFiles"); //Assingning the location to file object


      File[] listOfFiles = folder.listFiles();                         //Making the file content list
      DataOutputStream dout = new DataOutputStream(s.getOutputStream());  //Sends data to the Client
      for (File file : listOfFiles) {                                   //Linear Searching the file
        if (fileName.equalsIgnoreCase(file.getName())) {
          System.out.println("Showing it to the Client :" );
          System.out.println();

          dout.writeUTF( "File Name : " + fileName );             //Sending the file name
          dout.writeUTF( "Content : "  );

          BufferedReader br = new BufferedReader(new FileReader(file));

          String st;
          while ((st = br.readLine()) != null) {

            dout.writeUTF( st  );                         //Sending the File Content
          }
          return  ;
        }

      }

      dout.writeUTF(  "Sorry there is no such file !"  ); //If file is no found

      dout.flush();
      dout.close();

      ss.close();                                    //Shuts down the server
    } catch (Exception e) {System.out.println(e);}
  }
}

```
## Let's Write the Client Side :

```
import java.io.*;
import java.net.*;
import java.util.Scanner;

public class  Client {
  public static void main(String[] args) {
    try {
      Socket s = new Socket("localhost", 6666);        //Creating the Socket with the ServerSocket Port
      Scanner sc = new Scanner(System.in);
      DataOutputStream dout = new DataOutputStream(s.getOutputStream());      //Sends the data to the server
      System.out.println("Enter the name of file : ");
      String  fileName =  sc.next();                    //Taking the file name as input
      String notFoundMsg = "Sorry there is no such file !";
      dout.writeUTF(  fileName  );                       //Sending the name to server

      DataInputStream dis = new DataInputStream(s.getInputStream());     //Receives data from server

      System.out.println();

      String  receivedData1 = (String)dis.readUTF();

      System.out.println(receivedData1);
      if (receivedData1.equals( notFoundMsg )) {                           //Stopes receiving content if file not found
        s.close();

      } else {
        String  receivedData2 = (String)dis.readUTF();
        System.out.println(receivedData2);
        String  receivedData3 = (String)dis.readUTF();
        System.out.println(receivedData3);
      }

      dout.flush();
      dout.close();
      System.out.println("Server Stoped ");
      s.close();                                           //Stops the server
    } catch (Exception e) {System.out.println(e);}
  }
}
```
## Let's see how the thing works

So, for better context I am using two Command Prompt shells one where I am running `server.java` and `client.java`

### Let's see the scenario when the searched file exists :

Server Snap :
![File System Server Side Java](https://cdn.hashnode.com/res/hashnode/image/upload/v1613765533523/CoP7iEI9t.png)

Client Snap :
![File System Client Side Java ](https://cdn.hashnode.com/res/hashnode/image/upload/v1613765527128/zwP5R7Qpc.png)

### Let's see the scenario when the searched file does not exist :

Server Snap :
![File System Server Side Java ](https://cdn.hashnode.com/res/hashnode/image/upload/v1613765533523/CoP7iEI9t.png)

Client Snap :
![File System Client Side Java ](https://cdn.hashnode.com/res/hashnode/image/upload/v1613765607549/8InRwRoin.png)

##### Awesome ! you made a Remote File Content Display System using Java . 🔥🙌

#### I also create Computer Science related content on Youtube at Future Driven write blogs on my Personal Site . 🧡✔

#### I hope you liked and learnt something and Do comment and let me know your thoughts .🤞😃