Java 为什么不从指定的文件读取?
我正在开发一个简单的、模型化的点对点网络系统。引导服务器应该提供一个文本文件,其中包含连接到节点的IP列表,以帮助每个节点发现更多的对等点。但是,它没有像应该的那样编写文件,我不明白为什么。以下是我目前掌握的情况: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
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首先,尝试同时读取和写入同一文件似乎不是一个好主意,您必须管理两个对等方的并发访问。所以我的回答肯定是不够的。。。