我想提示用户开始输入字符,并且我希望他们能够输入任意长的字符,直到他们点击 control+d 退出。
例如,他们可以输入一串数字,例如:1234567,一旦他们决定按 control+d,他们输入的行就会显示出来(因此不必按回车键)
我想我需要一个缓冲阅读器或其他东西。有什么建议?
我收到了关于资源泄漏的警告(BufferedReader没有关闭).我通过在Return语句之前放置一个close语句并运行程序来修复它.但是我得到了一个NullPointerException.我的问题是它可以在文件读取完成时自动关闭(不知何故).这个问题看起来很相似.
我想一次一行地遍历一个文本文件,对内容进行操作,并将结果流式传输到一个单独的文件中。的教科书案例BufferedReader.readLine()。
但是:我需要用换行符将我的行粘在一起,如果原始文件没有适用于我的平台的“正确”换行符(Linux 上的 DOS 文件,反之亦然)怎么办?我想我可以在流中提前阅读一下,看看我找到了什么样的行尾,即使那真的很糟糕。
但是:假设我的输入文件没有尾随换行符。我想让事情保持原样。现在我需要在阅读每一行之前先看下一行结尾。在这一点上,为什么我要使用一个完全给我的readLine()课程?
这似乎应该是一个已解决的问题。是否有一个库(或者甚至更好的核心 Java7 类!)可以让我调用一个类似于readLine()从流中返回一行文本的方法,并且EOL 字符完好无损?
我正在尝试练习从 Java 文件中读取文本。我不太了解如何读取 N 行,比如文件中的前 10 行,然后将这些行添加到ArrayList.
例如,文件包含 1-100 个数字,如下所示;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- ....
Run Code Online (Sandbox Code Playgroud)
我想读取前 5 个数字,即 1,2,3,4,5 并将其添加到数组列表中。到目前为止,这是我设法做的,但我被卡住了,不知道现在该做什么。
ArrayList<Double> array = new ArrayList<Double>();
InputStream list = new BufferedInputStream(new FileInputStream("numbers.txt"));
for (double i = 0; i <= 5; ++i) {
// I know I need to add something here so the for loop read through
// the file but I …Run Code Online (Sandbox Code Playgroud) 我需要一些帮助:我正在用 Java 进行超市模拟,但我遇到了一个问题,我有一个文本文件 (Stock.txt),其中包含所有超市库存,例如:
其中第一个数字是产品的“id”,其次是产品所属的部门,第三个是产品名称,接下来是价格,最后一个数字是该产品的库存数量. 我有这门课:
public class Product {
protected String name;
protected double price;
protected String department;
protected int id;
protected int stock;
}
Run Code Online (Sandbox Code Playgroud)
所以,基本上我需要做的是从文本文件中读取每一行并创建产品,即对于第一行,做这样的事情:
Product product1 = new Product(0,"Bakery","Chocolate Cake", 12.5, 250);
Run Code Online (Sandbox Code Playgroud)
然后将其添加到数组中
Product[0] = product1;
Run Code Online (Sandbox Code Playgroud)
对于文本文件中的所有内容,当运行模拟时,每个客户将购买随机数量的库存随机产品,因此库存数量将减少。最后,当模拟结束时,程序必须在同一个文本文件中写入每个产品的修改数量。
问题是这可能太容易了,但我不知道如何做到这一点,因为自从我开始用 Java 编程(我是初学者)以来,用 Java 读取和写入文件对我来说一直是一个真正的问题。我有一些使用 BufferedReader 和 StringTokenizer 类来读取和创建对象问题的想法,但我不知道如何去做,我也不知道我必须如何做覆盖问题。我真的很感激你的帮助!
哦!顺便说一句,我真的只需要使用数组,所以使用 ArrayList 或任何其他结构甚至都不是一个选择:(
我尝试向WordlPress网站发送正常的Http请求.
如果我用我的Web浏览器打开它,一切正常.如果我在Android App上打开它会抛出java.io.FileNotFoundException.
Android代码:
class SendComment extends AsyncTask<String, Void, String> {
protected String doInBackground(String... urls) {
String _output = null;
try {
URL url = new URL(urls[0]);
BufferedReader buffer = new BufferedReader(new InputStreamReader(url.openStream()));
_output = buffer.readLine();
buffer.close();
} catch (IOException e) {
e.printStackTrace();
}
return _output;
}
protected void onPostExecute(String result) {
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我删除电子邮件地址的"@"或".com"时,它甚至适用于Android.似乎可用的电子邮件地址是崩溃的原因.
这是StackTrace:
java.io.FileNotFoundException: http://localhost.com/api/submit_comment?post_id=23856&name=Max&email=Max.Mustermann%40googlemail.com&content=hallo
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:206)
at java.net.URL.openStream(URL.java:470)
at de.example.app.SendComment.doInBackground(ServerManager.java:230)
at de.example.app.SendComment.doInBackground(ServerManager.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:292)
at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at …Run Code Online (Sandbox Code Playgroud) 这是我的问题:正常的 while 循环看起来像这样 -
while(condition){statements}
Run Code Online (Sandbox Code Playgroud)
and 语句执行直到条件变为false并且循环结束。我对这种陈述的逻辑感兴趣:
while((a=b.readLine) != null) { ... }
Run Code Online (Sandbox Code Playgroud)
就我而言,它用于客户端 - 服务器通信。条件有时为真,有时为真,但循环看起来像是在永远测试条件,当为真时,{}执行语句。在我看来,循环等待条件为真,然后运行语句。它是否以某种方式与方式BufferedReader和InputStreamReader工作或什么有关?此外,这个循环似乎永远不会结束,它只是等待条件成立true,然后运行语句,然后再次等待条件成立true,等等。我将感谢您的任何澄清。
现在我正在为一个游戏编写一个小的聊天历史插件,其中我想保存所有消息以及它在文件中发送的时间,这是完美的,但是在阅读它时我遇到了一些问题.
变量:
history = new HashMap<Date, String>();
这是我加载消息的方式:
public static void load(){
File f = new File(config.getString("file"));
if (!f.exists()){
try {
f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
try{
BufferedReader br = new BufferedReader(new FileReader(f));
String line;
while ((line = br.readLine())!=null){
String date = line.split(" ")[0];
for (int i = 0; i < line.split(" ").length; i++){
System.out.print(i+"="+line.split(" ")[i]+" ");
}
if (date.split(",")[0].split(".").length == 0) continue;
line = line.replaceAll(date+" ", "");
history.put(fromString(date), line);
}
br.close();
}catch(IOException e){
e.printStackTrace();
} …Run Code Online (Sandbox Code Playgroud) 我有以下代码可以从 CSV 中读取:
InputStream inp = getClass().getResourceAsStream(filename);
InputStreamReader r = new InputStreamReader(inp);
BufferedReader reader = new BufferedReader(r);
Run Code Online (Sandbox Code Playgroud)
关于已回答的问题:
Java BufferedReader,
将 InputStream 转换为 BufferedReader,Java 的 BufferedReader 和 InputStreamReader 类之间有什么区别?
BufferedReader[BR] 和 InputStreamReader[ISR] 都实现了相同的接口。BR 拥有 ISR 的所有方法以及其他方法,包括非常有用的 readLine() 方法和不太有用但仍然相关的 skip() 方法。尽管在这方面 BR 可以比 ISR 更有效地执行相同操作,但您不一定需要 BR 来读取单个字符。唯一的显着区别是 FileReader 是 ISR 的子类而不是 BR,尽管我在本网站上有消息称 FileReader 由于替代方案而不再真正使用。
我的研究表明 ISR 可以做的一切都由 BR 做得更好。我是一名年轻的开发人员,所以每个定义或导入的类对我来说似乎都是相关的。我想了解的是,是否不再使用某些类,用新版本或框架代替它们。我想知道更有经验的开发人员怎么说。那么,在使用 ISR 时是否有理由不使用 BR?
API 的快速链接:
BufferedReader
InputStreamReader
我使用以下样式使用 BufferedReader 读取文件
try (BufferedReader br = new BufferedReader(new FileReader("my_file"))) {
...
br.close();
} catch( IOException e ) {
System.out.println( e.getMessage() );
}
Run Code Online (Sandbox Code Playgroud)
我想知道的事情:
1-close()在正确的地方吗?
2- 我应该try..catch为`close()放置另一个吗?
3- 因为我使用了newfor br,是否足以调用close()或者我必须br = null为 GC编写?
4-FileReader已经被new编辑了,所以我应该销毁它吗?
bufferedreader ×10
java ×10
android ×1
arraylist ×1
bukkit ×1
email ×1
exception ×1
for-loop ×1
httprequest ×1
inputstream ×1
io ×1
line-endings ×1
readfile ×1
readline ×1
string ×1
while-loop ×1
writefile ×1