Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我正在尝试制作一个Java文件服务器_Java_Html_File_Http_Server - Fatal编程技术网

我正在尝试制作一个Java文件服务器

我正在尝试制作一个Java文件服务器,java,html,file,http,server,Java,Html,File,Http,Server,基本上,我想做的是在任何机器上运行一些服务器代码,并能够访问和下载该机器上的所有文件和文件夹。我在底部附上了我的代码,但以下是我所拥有的,我所知道的,以及我被卡住的地方: 编辑: 有人告诉我,我的问题太抽象,不清楚。我已经知道如何把我的文件放在列表中。现在我需要将它们列在“payLoad”字符串中 我知道我已经硬编码了文件浏览器。它只是帮助我从视觉上开始。上面写着“一些文件”和“一些文件夹”,因为那是我想要它们去的地方。 我已将文件加载到数组中,因为它们是动态的。现在我要将数组列表加载到HTML

基本上,我想做的是在任何机器上运行一些服务器代码,并能够访问和下载该机器上的所有文件和文件夹。我在底部附上了我的代码,但以下是我所拥有的,我所知道的,以及我被卡住的地方:

编辑: 有人告诉我,我的问题太抽象,不清楚。我已经知道如何把我的文件放在列表中。现在我需要将它们列在“payLoad”字符串中

我知道我已经硬编码了文件浏览器。它只是帮助我从视觉上开始。上面写着“一些文件”和“一些文件夹”,因为那是我想要它们去的地方。 我已将文件加载到数组中,因为它们是动态的。现在我要将数组列表加载到HTML表中。 我知道我需要做一些http和URL的事情,比如GET和POST来下载文件,但是我仍然需要帮助来开始

import java.net.*;
import java.io.*;
import java.util.Date;
import java.awt.Desktop;
import java.net.URI;

class Main {
  public static void main(String[] args) throws Exception {
    File folder = new File("/Users/DeAndre");
    File[] listOfFiles = folder.listFiles();
    int c = 0;
    // Listen for a connection from a client
    ServerSocket serverSocket = new ServerSocket(1234);
    if (Desktop.isDesktopSupported())
        Desktop.getDesktop().browse(new URI("http://localhost:1234"));
    else

        System.out.println("Please direct your browser to http://localhost:1234.");
        while(true) {
            Socket clientSocket = serverSocket.accept();
            System.out.println("Got a connection!");
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            String dateString = (new Date()).toGMTString();
            while(c<listOfFiles.length) {
                String payload = "\t\t<table>\n" +
                        "\t\t<tr><td align=right>Current directory:</td><td>/some/path/</td></tr>\n" +
                        "\t\t<tr><td>\n" +
                        "\t\t<b>Folders:</b><br>\n" +
                        "\t\t<select id=\"folderList\" size=\"15\" style=\"width: 280px\" onchange=\"javascript:location.href=this.value;\">\n" +
                        "\t\t\t<option value=\"index.html?cd=..\">..</option>\n" +
                        "\t\t\t<option value=\"index.html?cd=somefolder\">somefolder</option>\n" +
                        "\t\t\t<option value=\"index.html?cd=anotherfolder\">anotherfolder</option>\n" +
                        "\t\t\t<option value=\"index.html?cd=yetanotherone\">yetanotherfolder</option>\n" +
                        "\t\t</select>\n" +
                        "\t\t</td><td>\n" +
                        "\t\t<b>Files:</b><br>\n" +
                        "\t\t<select id=\"fileList\" size=\"15\" style=\"width: 280px\">\n" +
                        "\t\t\t<option value=\"somefile.txt\">somefile.txt</option>\n" +
                        "\t\t\t<option value=\"somefile.txt\">" + listOfFiles[20].getName() + "</option>\n" +
                        "\t\t\t<option value=\"anotherfile.jpeg\">anotherfile.jpeg</option>\n" +
                        "\t\t</select>\n" +
                        "\t\t</td></tr></table>" + listOfFiles[1];
                c++;

            for (int i = 0; i < listOfFiles.length; i++) {
                if (listOfFiles[i].isFile()) {
                    System.out.println("File " + listOfFiles[i].getName());
                } else if (listOfFiles[i].isDirectory()) {
                    System.out.println("Directory " + listOfFiles[i].getName());
                }
            }


            // Receive the request from the client
            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                System.out.println("The client said: " + inputLine);
                if (inputLine.length() < 2)
                    break;
            }

            //File Browser

            // Send HTTP headers
            System.out.println("Sending a response...");
            out.print("HTTP/1.1 200 OK\r\n");
            out.print("Content-Type: text/html\r\n");
            out.print("Content-Length: " + Integer.toString(payload.length()) + "\r\n");
            out.print("Date: " + dateString + "\r\n");
            out.print("Last-Modified: " + dateString + "\r\n");
            out.print("Connection: close\r\n");
            out.print("\r\n");

            // Send the payload
            out.println(payload);
            System.out.println("Done.");
        }
    }
}
}

旁注。出于某种原因,人们忘记了“帮助”这个词的定义,变得非常粗鲁。请我知道有很多我不知道,这就是我想学习的原因。我卡住了。正确的方向会很有帮助。

如果你想学习,这里有一个提示。不要将完整的逻辑实现到单个方法中。最好将一个大型方法拆分为几个方法,如

private void sendHttpHeaders(PrintWriter out, String payload, String dateString) {
    System.out.println("Sending a response...");
    out.print("HTTP/1.1 200 OK\r\n");
    out.print("Content-Type: text/html\r\n");
    out.print("Content-Length: " + Integer.toString(payload.length()) + "\r\n");
    out.print("Date: " + dateString + "\r\n");
    out.print("Last-Modified: " + dateString + "\r\n");
    out.print("Connection: close\r\n");
    out.print("\r\n");
}
这使代码更具可读性。提示:内联注释是创建新方法的良好指示

您好,
马丁

要得到具体的答案,你需要问一个具体的问题。如果你想要一个代码审查,有另一个网站。本论坛旨在为明确的编程问题提供明确的答案,这些问题不是基于观点的。本论坛并不试图向所有人展示所有东西。@PeterLawrey StackOverflow@cricket_007很好。@PeterLawrey这里有一个特定的问题。基本上,我想做的是在任何机器上运行一些服务器代码,并能够访问和下载该机器上的所有文件和文件夹,这就是我的目标。我的问题是如何将文件ArrayList中存储的字符串名放入HTML列表中您有一个for循环,用于打印文件名。改为附加到字符串。谢谢,但这仍然让我对我的主要问题感到困惑。这只是让我的代码更具可读性。这只是程序员的偏好吗?这会使它更快吗?不,它不会使它更快,但它更可读,因此对其他人来说更有趣。