0

わかりました、私は直接しようとします。私は、一般的なクライアント/サーバー アーキテクチャに基づくファイル共有アプリケーションに取り組んでいます。私は HandleClient クラスも持っていますが、ここでは特に重要ではありません。

私がやりたいことは、ユーザーが他のユーザーの共有フォルダーに保存できる特定のファイルを検索できるようにすることです。たとえば、3 人のユーザーがサーバーに接続されており、全員がそれぞれの共有フォルダーを持っているとします。そのうちの 1 人が「Madonna」という名前のファイルを検索しようとすると、アプリケーションはその名前を含むすべてのファイルを一覧表示し、そのファイル名の横に必要なファイルを持っている/持っているユーザーに関する情報があるはずです。その情報は、ユーザー名または IP アドレスのいずれかです。これがUserクラスです。これを記述する必要がある方法です(これが私の上司が望んでいた方法です):

import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;

public class User {

    public static String username;
    public static String ipAddress;

    public User(String username, String ipAddress) {

        username = username.toLowerCase();
        System.out.println(username + " " + ipAddress);
    }

    public static void fileList() {

        Scanner userTyping = new Scanner(System.in);
        String fileLocation = userTyping.nextLine();
        File folder = new File(fileLocation);
        File[] files = folder.listFiles();

        ArrayList<String> list = new ArrayList<String>();

        for (int i = 0; i < files.length; i++) {

            list.add(i, files[i].toString().substring(fileLocation.length()));
            System.out.println(list.get(i));

        }

    }

    public static void main(String args[]) {
        System.out.println("Insert the URL of your shared folder");
        User.fileList();

    }


}

このクラスは、特定のユーザーの属性 (ユーザー名、IP アドレス) を格納し、その特定のユーザーの共有フォルダーからファイルのリストを作成します。リストの型は ArrayList です。そうでなければなりません。これも上司に言われました。

一方、RequestForFile(String fileName) という名前の別のクラスが必要です。その目的は、検索時にログインしているすべてのユーザーのファイルの ArrayLists 内で特定のファイルを探すことです。

これは本来あるべき姿であり、エラーが発生してクラスを完了できないため、特にあなたの助けが必要な場所です。

import java.util.ArrayList;


public class RequestForFile {

    public RequestForFile(String fileName) {

        User user = new User("Slavisha", "84.82.0.1");
        ArrayList<User> listOfUsers = new ArrayList();
        listOfUsers.add(user);

        for (User someUser : listOfUsers) {

            for (String request : User.fileList()) {
                if (request.equals(fileName))
                    System.out.println(someUser + "has that file");
            }

        }

    }

}

アイデアは、ユーザーが他のユーザーのリストを調べて、必要なファイルの場所をユーザーに返すことです。今のところ GUI はさておき、この問題を修正するときにそれを取得します。どんな助けでも感謝します。ありがとう、私はこの問題に関して何でも答えるためにここにいます。

4

3 に答える 3

0

「14行目:for(String request:User.fileList()){」で、次のエラーが発生します:「void型はここでは許可されていません」および「foreachは式の型に適用できません」

ではなくUser.fileList()、を返すようにする必要があります。List<String>void

したがって、置き換えます

public static void fileList() {
    // ...
}

public static List<String> fileList() {
    // ...
    return list;
}

基本的なJavaプログラミングの詳細については、ここの「基本をカバーする試験」の章で利用できるSunチュートリアルを強くお勧めします

于 2010-01-09T15:28:11.637 に答える
0

ここには次のような多くの問題があります。

このコードはコンパイルできないと思います:

         for (String request : User.fileList()) 

fileList()は何も返さないためです。次に、fileList()が静的である理由の問題があります。これは、すべてのユーザーオブジェクトが同じリストを共有していることを意味します。main()からユーザーオブジェクトをテストしようとしているので、これがあると思います。

代わりに、次のようにコーディングする必要があると思います。

 myUser = new User(...);
 myUser.fileList()

そのため、fileListを静的にすることはできません。

これで、全体的な問題をより明確に説明できましたが、それによっていくつかのより深い問題が明らかになります。

一番上から始めましょう。リクエストオブジェクト:1つのファイル定義を持つ1人のユーザーに対する1つのリクエストを表していると思います。しかし、それは多くのユーザーのフォルダを調べに行く必要があります。要求しているユーザーをリストに追加しますが、他のユーザーはどうでしょうか。これは、すべてのユーザーを保持する責任がある別のクラスが必要であることを意味すると思います。

とにかく、UserManagerと呼ばれるクラスを持つことができます。

 UserMananger{

      ArrayList<User> allTheUsers;

       public UserManager() {

       }

       // methods here for adding and removing users from the list

       // plus a method for doing the search

       public ArrayList<FileDefinitions> findFile(request) [
               // build the result
       }

 }
于 2010-01-09T15:31:16.467 に答える
0

fileList()メソッドは、反復可能なものを返す必要があるため、このエラーが発生しているように見えます。これには、そのメソッドが返すvoidは含まれていません。記述されているように、fileListはコンソールに情報を返します。これは、独自のデバッグ目的には最適ですが、他のメソッドはfileListがコンソールに送信する情報を取得できないことを意味します。

大まかに言えば、RequestForFileが別のクラスであるのはなぜですか?メソッドが1つしかない場合は、静的メソッドとして、またはそれを呼び出すクラスのメソッドとして記述できます。また、他のユーザーのリストをどのように取得しますか?1人のユーザーをハードコーディングしたため、そのままにする方法はないようです。

そして答えを見ると、すべてのユーザーのコントローラー/オブザーバーとして機能するクラスを持つというdjnaの提案を強く2番目にしたいと思います。

于 2010-01-09T15:34:18.227 に答える