Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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_P2p - Fatal编程技术网

Java 为什么不从指定的文件读取?

Java 为什么不从指定的文件读取?,java,p2p,Java,P2p,我正在开发一个简单的、模型化的点对点网络系统。引导服务器应该提供一个文本文件,其中包含连接到节点的IP列表,以帮助每个节点发现更多的对等点。但是,它没有像应该的那样编写文件,我不明白为什么。以下是我目前掌握的情况: package network; import java.net.*; import java.io.IOException; import java.io.*; import javax.swing.JOptionPane; public class PeerBootstrapS

我正在开发一个简单的、模型化的点对点网络系统。引导服务器应该提供一个文本文件,其中包含连接到节点的IP列表,以帮助每个节点发现更多的对等点。但是,它没有像应该的那样编写文件,我不明白为什么。以下是我目前掌握的情况:

package network;
import java.net.*;
import java.io.IOException;
import java.io.*;
import javax.swing.JOptionPane;

public class PeerBootstrapServer 
{ 
public static void main(String[] args) throws IOException
{
    String peerFilePath = JOptionPane.showInputDialog("Please provide a peer list path:");

    File file = new File(peerFilePath);

    BufferedWriter writer = new BufferedWriter(new FileWriter(file));
    BufferedReader reader = new BufferedReader(new FileReader(file));

    ServerSocket listener = new ServerSocket(8088);
    try
    {
        while(true)
        {
            Socket socket = listener.accept();                              
            try
            {
                String peer = socket.getInetAddress().getHostAddress();

                boolean isRecognized = false;

                for(String line; (line = reader.readLine()) != null; )
                {
                    if(line == peer)
                    {
                        isRecognized = true;
                    }
                }

                if(isRecognized == false)
                {
                    writer.newLine();
                    writer.write(peer);
                }

                PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
                for(String line; (line = reader.readLine()) != null; )
                {
                    out.println(line);
                }                   
            }
            finally
            {
                socket.close();
            }
        }
    }

    finally
    {
        listener.close();
        reader.close();
        writer.close();
    }
  }
}

非常感谢您的帮助和/或提示

原因是,在第一个循环读取输入流后,您到达输入流的末尾,然后在执行第二个循环时,reader.readLine只返回null

您必须在第二个循环之前调用reset。e、 g

reader.reset();
for(String line; (line = reader.readLine()) != null; )
{
    out.println(line);
}                   
编辑
在您的情况下,最好为每个连接打开读写器,而不是一次性打开。如果您需要先阅读以进行查找,然后再发送内容,也有同样的想法

您正在打开同一文件上的BufferedWriter和BufferedReader。这不可能是对的?它需要打开它来读取IP的列表,检查是否已经列出了一个,然后再添加一个新的IP。这是对的,只是可能不正确:好的,很好。没有彻底阅读代码的其余部分。然后我。。。主线程java.net.UnknownHostException中的异常:H:\peers.txt位于java.net.AbstractPlainSocketImpl.connectUnknown Source位于java.net.PlainSocketImpl.connectUnknown Source位于java.net.Socket.connectUnknown Source位于java.net.Socket.connectUnknown Source位于java.net.Socket.Unknown Source在java.net.Socket.Unknown Source at network.PeerNode.main PeerNode.java:11首先,尝试同时读取和写入同一文件似乎不是一个好主意,您必须管理两个对等方的并发访问。所以我的回答肯定是不够的。。。