在 Java 中使用 User 类的 RequestForFile() 类的问题

Posted

技术标签:

【中文标题】在 Java 中使用 User 类的 RequestForFile() 类的问题【英文标题】:problems with RequestForFile() class that is using User class in Java 【发布时间】:2010-01-09 15:01:21 【问题描述】:

好的,我会尽量直接。 我正在开发一个基于通用客户端/服务器架构的文件共享应用程序。我也有 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();

    



此类存储特定用户的属性(用户名、IPAddress),并从该特定用户的共享文件夹创建文件列表。列表类型是 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,当我解决这个问题时,我会处理它。 任何帮助表示赞赏。 谢谢 我是来回答有关此事的任何事情的。

【问题讨论】:

这个错误是秘密吗?如果没有,你愿意分享吗? 在“第 14 行:for (String request : User.fileList()) ”我收到此错误:“此处不允许使用 void 类型”和“foreach 不适用于表达式类型” 致业余程序员:错误说明了问题的根本原因。你当然不应该忽略它们,而应该解释它们。如果您不能,请与我们分享,以便我们协助翻译。要知道,一旦了解了根本原因,解决方案就显而易见了。 【参考方案1】:

这里有很多问题,例如:

我不认为这段代码可以编译:

         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
       

 

【讨论】:

谢谢,这让我轻松多了。我仍然无法绕过 surch 功能正常工作。我会尝试找出更好的解决方案或提出不同的问题【参考方案2】:

在“第 14 行:for (String request : User.fileList()) ”我收到此错误:“此处不允许使用 void 类型”和“foreach 不适用于表达式类型”

您需要让User.fileList() 返回List&lt;String&gt; 而不是void

因此,替换

public static void fileList() 
    // ...

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

要了解有关基本 Java 编程的更多信息,我强烈推荐 Trials Covering the Basics chapter here 中提供的 Sun 教程。

【讨论】:

谢谢。我知道基础知识,但我的知识有一些漏洞。希望随着时间的推移会变得更好。【参考方案3】:

您似乎遇到了该错误,因为 fileList() 方法需要返回可以迭代的内容 - 不包括 void,这是该方法返回的内容。正如所写,fileList 正在向控制台返回信息,这对您自己的调试目的非常有用,但这意味着其他方法无法获取 fileList 发送到控制台的任何信息。

更广泛地说,为什么 RequestForFile 是一个单独的类?如果它只包含一个方法,则可以将其编写为静态方法,或者编写为将要调用它的类中的方法。另外,它将如何获取其他用户的列表?看起来没有办法按原样这样做,因为您硬编码了一个用户。

查看答案,我强烈支持 djna 的建议,即让某个类充当所有用户的控制器/观察者。

【讨论】:

我现在把 RequestForFile 作为一个单独的类,这样我可以更轻松地工作。稍后我会将它作为方法放入 UserManager 类中。我同意,Djina 的建议很有效。也感谢您的贡献。

以上是关于在 Java 中使用 User 类的 RequestForFile() 类的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何向我的 Java Servlet 的现有 HttpServletRequest 添加参数?

java的初始化与清理

Java中File类的基本用法

hibernate中持久化类的使用

javajava反射 Field类的研究使用

Mono<ServerResponse> 与 Mono<ResponseEntity<MyPojo>> 作为 Java Spring Webflux @Reques