проблемы с классом RequestForFile (), который использует класс User в Java - PullRequest
0 голосов
/ 09 января 2010

Хорошо, я постараюсь быть прямым. Я работаю над приложением для обмена файлами, которое основано на общей архитектуре Client / Serer. У меня также есть класс HandleClient, но это не особенно важно здесь.

Я хочу, чтобы пользователи могли искать определенный файл, который можно сохранить в общих папках других пользователей. Например, 3 пользователя подключены к серверу, и у них всех есть свои общие папки. Один из них хочет выполнить поиск файла с именем «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 в стороне пока, я доберусь до него, когда я исправлю эту проблему. Любая помощь приветствуется. Спасибо Я здесь, чтобы ответить на все вопросы по этому вопросу.

Ответы [ 3 ]

0 голосов
/ 09 января 2010

Здесь много проблем, таких как:

Я не думаю, что этот код может компилироваться:

         for (String request : User.fileList()) 

Потому что fileList () ничего не возвращает. Тогда возникает вопрос, почему fileList () является статическим. Это означает, что все объекты пользователя совместно используют один и тот же список. Я предполагаю, что у вас есть это, потому что вы пытаетесь проверить свой пользовательский объект из main ().

Я думаю, что вместо этого вы должны были закодировать:

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

и, следовательно, fileList не может быть статическим.

Вы теперь объяснили свою общую проблему более четко, но это показывает некоторые более глубокие проблемы.

Давайте начнем с самого верха. Ваш объект запроса: я думаю, что он представляет один запрос для одного пользователя с одним определением файла. Но это нужно искать в папках многих пользователей. Вы добавляете запрашивающего пользователя в список, но как насчет других. Я думаю, что это означает, что вам нужен другой класс, отвечающий за удержание всех пользователей.

В любом случае, у нас есть класс 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
       }

 }
0 голосов
/ 09 января 2010

Похоже, вы получаете эту ошибку, потому что метод fileList () должен возвращать что-то, через что можно пройти итерацию - что не включает void, что и возвращает этот метод. Как написано, fileList возвращает информацию на консоль, что отлично подходит для ваших собственных целей отладки, но это означает, что другие методы не могут получить какую-либо информацию, которую fileList отправляет на консоль.

В более широком смысле, почему RequestForFile - это отдельный класс? Если он содержит только один метод, вы можете просто написать его как статический метод или как метод в классе, который будет вызывать его. Кроме того, как он получит списки других пользователей? Похоже, что нет способа сделать это как есть, поскольку вы жестко запрограммировали одного пользователя.

И, глядя на ответы, я настоятельно рекомендую djna иметь некоторый класс, который действует как контролер / наблюдатель для всех пользователей.

0 голосов
/ 09 января 2010

в "строке 14: for (запрос строки: User.fileList ()) {" Я получаю эту ошибку: "тип void здесь не разрешен", а также "foreach не применим к типу выражения"

Вы должны позволить User.fileList() вернуть List<String>, а не void.

Таким образом, заменить

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

по

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

Чтобы узнать больше о базовом программировании на Java, я настоятельно рекомендую учебные пособия Sun, доступные в Испытания, охватывающие основы , глава здесь .

...