关闭缓冲读取器时程序冻结。使用 forge modding API 进行我的世界,但是我之前在使用独立服务器端代码时遇到过这个问题。这个特定的代码工作正常,然后随机开始给我这个问题,不知道如何解决这个问题..
关闭方法:
public static void closeConnection() {
if (keepConnection) {
keepConnection = false;
try {
bufferedReader.close();
printWriter.close();
socket.close();
}
catch (IOException e) {
e.printStackTrace();
}
finally{
token = null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经检查以确保这确实是发生冻结的地方。有任何想法吗?
BufferedReader当我们创建一个新对象而不显式提供编码时,Java 默认使用什么编码/字符集?
例如:
try (final BufferedReader reader = new BufferedReader(new FileReader("my_file.txt"))) {
reader.readLine(); // What encoding is used to read the file?
}
Run Code Online (Sandbox Code Playgroud) 对于java来说,我是新手.我想从java中启动的进程中读取stdout.我在谷歌搜索时得到以下代码:
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(args);
BufferedReader br = new BufferedReader(
new InputStreamReader(proc.getInputStream()));
while(br.ready()){
System.out.println(br.readLine());
}
Run Code Online (Sandbox Code Playgroud)
但是,此代码不会打印进程(例如,ls)应该生成的输出(顺便说一下,我在Linux上,openJDK 1.6)
但是,如果我将while循环更改为:
String line;
while((line = br.readLine())!=null){
System.out.println(line);
}
Run Code Online (Sandbox Code Playgroud)
它按预期工作.
以前的代码有什么问题?根据java api doc所说的,我认为它们是相似的.
我有一个扩展BufferedReader的类,并且文件流列表b.close()被除最后一个流之外的所有文件调用,我想保持流打开。我该怎么做?
谢谢
类TestReader(BufferedReader):
通过
清晰度测试(流):
用于流中的流:
b = TestReader(流)
do_something(b)
#除了stream [-1]以外的所有流都关闭了,如何防止这种情况发生?
stream = [open('test1.txt','rb'),open('test2.txt','rb')]
测试(流)
stream.do_something_else()
我有一个初始化文件(initialize.java),它使用fileInputStream从fileInput.txt中提取数据,但它们都位于不同的目录中.
Run Code Online (Sandbox Code Playgroud)Project/library/initialize.java Project/resources/text/fileInput.txt
我在initialize.java中的代码是:
FileInputStream fstream = new FileInputStream("/resources/text/fileInput.txt");
Run Code Online (Sandbox Code Playgroud)
但是文件无法读取.我也试过了
FileInputStream fstream = new FileInputStream("./resources/text/fileInput.txt");
Run Code Online (Sandbox Code Playgroud)
但那也行不通.
如何访问txt文件以及使用"./resources"和"/ resources"之间的区别是什么?
感谢您阅读本文.
我正在尝试使用BufferedReader从文本文件中读取.我想跳过一个有"#"和"*"的行,它可以工作.但它不适用于空行.我使用line.isEmpty()但只显示第一个输出.
我的文本文件如下所示:
# Something something
# Something something
# Staff No. 0
* 0 0 1
1 1 1 1 1 1
* 0 1 1
1 1 1 1 1 1
* 0 2 1
1 1 1 1 1 1
Run Code Online (Sandbox Code Playgroud)
我的代码:
StringBuilder contents = new StringBuilder();
try {
BufferedReader input = new BufferedReader(new FileReader(folder));
try {
String line = null;
while (( line = input.readLine()) != null){
if (line.startsWith("#")) {
input.readLine();
}
else if (line.startsWith("*")) {
input.readLine();
} …Run Code Online (Sandbox Code Playgroud) 我目前正在用Java编写一个打开套接字的应用程序,它应该通过它接收和发送数据.
据我所知,BufferedReader.readLine()在缓冲区为空时返回null.但是,我的代码不会从读取BufferedReader中的行的循环中退出.我的想法是,我收到一个歌曲列表,然后将值发送到开始播放歌曲的服务器.
这是代码:
package me.frankvanbever.MediaServerClient;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class MediaServerClient {
/**
* @param args
*/
public static void main(String[] args) {
Socket server;
try {
server = new Socket( "10.42.0.41" , 2626 );
InputStream in = server.getInputStream();
OutputStream out = server.getOutputStream();
BufferedReader bin = new BufferedReader( new InputStreamReader( in ) , 4096);
String inputline;
while( (inputline = bin.readLine()) != null){
System.out.println(inputline);
}
System.out.println("exited loop");
out.write('1');
} catch …Run Code Online (Sandbox Code Playgroud) 虽然我意识到有一些原生的scala方法可以做到以下几点,但是理解这种行为会很有见地.
对于以下代码片段,for循环迭代器不正确:
val br = new BufferedReader(new FileReader("/tmp/test.txt"))
val stdin = new FileOutputStream("/tmp/x.txt")
for (line : String <- br.readLine) {
// val mys = new String(line)
stdin.write(line)
stdin.write('\n')
}
Run Code Online (Sandbox Code Playgroud)
迭代器行给出以下编译错误:
scrutinee is incompatible with pattern type;
found : String
required: Char
for (line : String <- br.readLine) {
^
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用BufferedReader和Scanner从文件中读取一行.我可以创造这两个没问题.我要做的是读一行,计算该行中逗号的数量,然后返回并抓住每个单独的项目.所以如果文件看起来像这样:
项目1,项目2,项目3,等等.
ITEM4,ITEM5,ITEM6等.
该程序将返回有四个逗号,然后返回并一次获得一个项目.它将重复下一行.返回逗号的数量对我的程序至关重要,否则,我只会使用Scanner.useDelimiter()方法.我也不知道如何返回到行的开头来抓取每个项目.
我有一些正在向数据库发送查询的类.当查询在代码中时,一切都运行正常,但由于它非常大,我决定把它放在一个文件中并用缓冲读取器读取它,但它不起作用,我总是这样:
java.sql.SQLException:ORA-00900:无效的SQL语句
这是我的查询:
SELECT
p.first_name \"FirstName\",
p.middle_name \"MiddleName\",
p.last_name \"LastName\",
p.birth_name \"BirthName\",
p.mothers_name \"MothersName\",
p.nick_name \"NickName\",
p.username \"Username\",
p.currency_id \"Currency\",
p.preferred_language_id \"PreferredLanguage\",
p.accepts_email \"AcceptsEmail\",
p.birth_date \"BirthDate\",
p.hear_about_us \"HeardAboutUs\",
p.tax_category_id \"TaxCategory\",
p.birth_place \"BirthPlace\",
p.accepts_id_verification \"AcceptsIdentityVerification\",
p.security_prompt \"SecurityPrompt\",
p.gender_id \"Gender\",
p.tracking_campaign_name \"TrackingCampaign\",
p.accepts_sms \"AcceptsSMS\",
p.accepts_promotional_sms \"AcceptsPromotionalSMS\",
p.identification_number \"IdentificationNumber\",
p.id_verified_id \"IdentificationVerified\",
p.security_word \"SecurityWord\",
p.ident_manual_verified_until \"IdentificationManualVerified\",
p.accepts_chat \"AcceptsChat\",
p.frequent_player_level_id \"FrequentPlayerLevel\",
p.preferred_comm_channel \"PreferredCommunicationChannel\",
p.is_reward_abuser \"IsRewardAbuser\",
p.newsletter_id \"Newsletter\",
p.accepts_rewards \"AcceptsRewards\",
ci.postal_code \"PostalCode\",
ci.country_id \"Country\",
ci.region \"Region\",
ci.email \"Email\",
ci.address1 \"Address1\",
ci.address2 \"Address2\",
ci.address3 \"Address3\",
ci.phone1 \"Phone1\", …Run Code Online (Sandbox Code Playgroud)