Javaソケット内のファイルに対して両方の操作を行うことは可能ですか? もしそうなら、どのように?クライアントが読み取り用の「R」、書き込み用の「W」などのトークンを送信し、サーバーがそれを調べて要求された操作を実行する方法を試しました。しかし、これはうまくいかないようです。
関連するクライアント側コードは次のとおりです。
public static void readFile(String input, BufferedReader stdin, PrintWriter out, BufferedReader in) throws IOException
{
System.out.println("Enter the filename that you want to read");
stdin = new BufferedReader(new InputStreamReader(System.in));
String input = stdin.readLine();
out.println("R" + input);
System.out.println("File from server \n\n" + in.readLine());
}
public static void writeFile(String input, BufferedReader stdin, PrintWriter out, BufferedReader in, Socket s) throws IOException
{
System.out.println("Enter the filename that you want to write to");
stdin = new BufferedReader(new InputStreamReader(System.in));
input = stdin.readLine();
out.println("W" + " " + input);
System.out.println("Enter the text you want to enter in the file");
out.println(stdin.readLine());
System.out.println("File has been updated. The updated file from the server is: " + in.readLine());
}
サーバー側では、次のようにコードを記述しました。
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
String[] recv = in.readLine().split(" ");
String file_name = recv[1];
これは、ファイルの読み取りまたは書き込みが必要かどうかを確認する場所です。
if(recv[0] == "R")
{
while((file_name = recv[1]) != null)
{
System.out.println("Filename got from client: " + file_name);
fileread = new BufferedReader(new FileReader(file_name));
while((line = fileread.readLine()) != null)
{
out.println(line);
}
System.out.println("The contents of the file " + file_name + " has been sent to the client");
}
}
if(recv[0] == "W")
{
System.out.println("Filename got from client: " + file_name);
File file = new File(file_name);
filewrite = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(filewrite);
line = in.readLine();
System.out.println(line);
bw.write(line);
bw.close();
out.println(line);
System.out.println("The contents of the file " + file_name + " has been sent to the client");
}
}
明示的なエラーは発生しませんが、プログラムを実行すると、クライアントはファイル名を取得し、サーバーはそれを認識します (サーバーにファイルの名前を出力させるので、これはわかっています)。その後、サーバーは何もしません。停止します (エラーや例外なし)。
誰が私がどこで間違ったのか教えてもらえますか? または、タスクを実行するためのより良い方法はありますか?
前もって感謝します。