在Java中使用用户类的RequestForFile()类存在问题
好吧,我尽量直截了当。 我正在开发一个基于通用客户机/服务器体系结构的文件共享应用程序。我也有HandleClient类,但这在这里并不特别重要 我想做的是允许用户搜索可以存储在其他用户共享文件夹中的特定文件。例如,3个用户与服务器连接,他们都有各自的共享文件夹。其中一个用户想要搜索一个名为“Madonna”的文件,应用程序应该列出包含该名称的所有文件,并且在该文件名旁边应该有关于拥有/拥有想要的文件的用户的信息。该信息可以是用户名或IP地址。这是用户类,它需要编写的方式(这是我的上级想要的):在Java中使用用户类的RequestForFile()类存在问题,java,file,logging,sharing,Java,File,Logging,Sharing,好吧,我尽量直截了当。 我正在开发一个基于通用客户机/服务器体系结构的文件共享应用程序。我也有HandleClient类,但这在这里并不特别重要 我想做的是允许用户搜索可以存储在其他用户共享文件夹中的特定文件。例如,3个用户与服务器连接,他们都有各自的共享文件夹。其中一个用户想要搜索一个名为“Madonna”的文件,应用程序应该列出包含该名称的所有文件,并且在该文件名旁边应该有关于拥有/拥有想要的文件的用户的信息。该信息可以是用户名或IP地址。这是用户类,它需要编写的方式(这是我的上级想要的):
导入java.io.File;
导入java.util.ArrayList;
导入java.util.Scanner;
公共类用户{
公共静态字符串用户名;
公共静态字符串IP地址;
公共用户(字符串用户名、字符串IP地址){
username=username.toLowerCase();
System.out.println(用户名+“”+ipAddress);
}
公共静态无效文件列表(){
Scanner userTyping=新扫描仪(System.in);
String fileLocation=userTyping.nextLine();
文件夹=新文件(文件位置);
File[]files=文件夹.listFiles();
ArrayList=新建ArrayList();
对于(int i=0;i
此类存储特定用户的属性(用户名、IP地址),并从该特定用户的共享文件夹中创建文件列表。列表类型是ArrayList,这是必须的,同样,我的上级告诉我
另一方面,我需要另一个名为RequestForFile(stringfilename)的类,其目的是从搜索时登录的所有用户的文件列表中查找某个文件
这就是它应该看起来的样子,这就是我特别需要你帮助的地方,因为我遇到了一个错误,我无法完成课程
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");
}
}
}
}
import java.util.ArrayList;
公共类RequestForFile{
公共RequestForFile(字符串文件名){
用户=新用户(“斯拉维沙”,“84.82.0.1”);
ArrayList listOfUsers=新的ArrayList();
添加(用户);
对于(用户someUser:ListoUsers){
for(字符串请求:User.fileList()){
if(request.equals(文件名))
System.out.println(someUser+“拥有该文件”);
}
}
}
}
这样做的目的是让用户在其他用户的列表中查找,并返回具有所需文件位置的用户。
暂且不谈GUI,我将在解决此问题时着手解决它。
谢谢你的帮助。
谢谢
我来这里是为了回答关于这件事的任何问题
在“第14行:for(字符串请求:User.fileList()){”中,我得到了这个错误:“此处不允许使用void类型”以及“foreach不适用于表达式类型”
您需要让User.fileList()
返回List
而不是void
因此,替换
public static void fileList() {
// ...
}
借
公共静态列表文件列表(){
// ...
退货清单;
}
要了解有关基本Java编程的更多信息,我强烈推荐中提供的Sun教程。这里有很多问题,例如: 我不认为这段代码可以编译:
for (String request : User.fileList())
因为fileList()不返回任何内容。接下来的问题是为什么fileList()是静态的。这意味着所有用户对象都共享同一个列表。我想这是因为您试图从main()测试用户对象
我认为你应该编写代码:
myUser = new User(...);
myUser.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
}
}
UserMananger{
ArrayList所有用户;
公共用户管理器(){
}
//此处用于从列表中添加和删除用户的方法
//加上一个进行搜索的方法
公共ArrayList findFile(请求)[
//建立结果
}
}
您似乎收到了该错误,因为文件列表()方法需要返回可以迭代的内容-其中不包括void,void是该方法返回的内容。如前所述,fileList将信息返回到控制台,这对于您自己的调试目的非常有用,但这意味着其他方法无法获取fileList发送到控制台的任何信息
更广泛地说,为什么RequestForFile是一个单独的类?如果它只包含一个方法,您可以将其作为静态方法编写,或者作为将调用它的类中的方法编写。此外,它如何获取其他用户的列表?看起来没有办法这样做,因为您已经硬编码了一个用户
看看答案,我强烈支持djna的建议,让某个类充当所有用户的控制器/观察者。错误是一个秘密吗?如果不是,您愿意分享吗?在“第14行:for(String request:User.fileList()){”中,我得到了这个错误:“此处不允许使用void type”,并且“foreach不适用于表达式t
myUser = new User(...);
myUser.fileList()
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
}
}