java问题,文件java读取json文件

本文说明了一个InputStreamReader类的public?int?read(char[]?cbuf, int?offset, int?length)方法使用时应该注意的一个问题。自己是一个java的新手,所以这个问题对老鸟来说有没有帮助我并不知情,但是我在网络上并没有找到这个问题的详细关于此方面的说明。
先说我的结论,在read方法中offset只能为0,读取的开始位置需要使用skip方法来设置。此结论也适用于java.io.Reader类。
上面这个图片是java api对此方法的说明,并没有指明此问题。所以我并不确定此方法是不是在所有的场合都是这样的,但我在进行Android编程是经过自己的验证此结论是没有问题的。
我遇到的问题是这样的:
在进行Android编程时,我想从一个文件中从第100个字符开始,读取长度为100的字符串。一开始使用的方法类似于read(cbuf, 100, 100)这样的代码,但结果是编译可以通过,但每执行到此行代码时调试直接退出,程序终止,没有任何错误提示。
我花了几天的时间,用了多种方法测试,最张发现,只要是第二个变量offset不为0时,就会出现此问题,所以我就想将文件读取的指针移到100那是不是可以正常读取。最张发现使用
read(cbuf, 0, 100);
这两行代码实现了此功能。
现在看起来这个功能并不复杂,也不难理解,但是在没有解决此问题之前自己真是百思不解,希望我的文章对其他人有点帮助。
原创文章,文章首发于:
原创文章,转载请注明: 转载自
本文链接地址:
二维码用的越来越多了,所以自己就想研究一下。
我之前也看过有关二维吗相关的东西,知道ZXing这个东西,所以一上去就找到这个类库了。但下下来却发现自己真 [&]
经过几天的努力,ZXingAndroidClientLibrary终于经过测试,成功发布。Github地址:https://github.com/RileyG [&]
最近在捣鼓Leica仪器通过蓝牙与Android手机连接,把此事记录一下,希望对其他人有用。
一、各种连接不成功
最早自己使用的是Google官方的例子: [&]
如果之前有其他语言(如Java、C#等)的开发基础,那么在阅读和使用Kotlin时基本没有太大障碍,但有一个关键词是Kotlin中新出现的,那就是when。其 [&]
在开始这个教程之前,我还是很有压力的,怎么样才能把这个问题说明白,真是挺让我头疼的。
先给大家来点基础知识吧:
一、函数式编程
也许继"面 [&]
如果大家英文比较好Kotlin Programming [&]
新跟进评论
我评论的新回复
高性能服务器,就选阿里云
回顶部java 的文件保存和读取问题?_百度知道
java 的文件保存和读取问题?
我是初学者,不知道怎样在Netbeans中将输入的内容保存到txt文档中,还有也不知道怎样将它的内容读取出来。输入的内容有一定格式:字符串、字符串、整数、整数、整数、整数也要按照同样的顺序读取出来!!帮帮我啊,谢谢!!!
我有更好的答案
可以通过BufferedReader 流的形式进行流读取,之后通过readLine方法获取到每行的内容,之后通过OutputStreamWriter进行文件写入。 BufferedReader bre =OutputStreamWriter pw =//定义一个流try {String file = &D:/test/test.txt&;bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流pw = new OutputStreamWriter(new FileOutputStream(“D:/test.txt”),&GBK&);//确认流的输出文件和编码格式,此过程创建了“test.txt”实例while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环{pw.write(str );//将要写入文件的内容,写入到新文件};pw.close();//关闭流bre .close();//关闭流备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。
采纳率:82%
来自团队:
package org.info.import java.io.BufferedRimport java.io.BufferedWimport java.io.FileRimport java.io.FileWimport java.io.IOEimport java.io.InputStreamRpublic class TestFile { public static void main(String[] args) {
String file = &C:\\Test.txt&;
String str = &&;
FileReader fr =
BufferedReader br =
FileWriter fw =
BufferedWriter bw =
// 接收键盘输入,这是以输入的分隔为一个空格作的,其它的自己考虑
buf = new BufferedReader(new InputStreamReader(System.in));
str = buf.readLine();
System.out.println(&-------------------------------------&);
System.out.println(&键盘输入:& + str);
System.out.println(&-------------------------------------&);
// 将键盘输入作成以逗号分隔的字符串保存
String[] s = str.split(& &);
for (int i = 0; i & s. i++) {
str += s[i] + &,&;
str = str.substring(0, str.length() - 1);
fw = new FileWriter(file);
bw = new BufferedWriter(fw);
bw.write(str);
// 读取文件中的字符串
fr = new FileReader(file);
br = new BufferedReader(fr);
while (br.ready()) {
str = br.readLine();
s = str.split(&,&);
for (int i = 0; i & s. i++) {
System.out.println(s[i]);
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
if (bw != null) {
bw.close();
if (fw != null) {
fw.close();
if (fr != null) {
fr.close();
if (br != null) {
br.close();
} catch (IOException ioe) {
System.out.println(ioe.getMessage());
本回答被提问者采纳
你可以看一下java文件操作.至于保存的时候,你可以全部保存成字符串用符号把他们分割开,读的时候在把他们分开,转换成整数就行了撒。
你可以输入的值都保存到一个string里,然后一起写到文件里就行了。
用数据流....
额,看不懂!
其他3条回答
为您推荐:
其他类似问题
您可能关注的内容
java的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Java开发中文件读取方式总结
编辑:www.fx114.net
本篇文章主要介绍了"Java开发中文件读取方式总结 ",主要涉及到Java开发中文件读取方式总结 方面的内容,对于Java开发中文件读取方式总结 感兴趣的同学可以参考一下。
JAVA开发中,免不了要读文件操作,读取文件,首先就需要获取文件的路径。
路径分为绝对路径和相对路径。
在文件系统中,绝对路径都是以盘符开始的,例如C:\abc\1.txt。
什么是相对路径呢?相对路径就是相对与其他文件的路径。比如说有这么一个文件,它的绝对路径是C:\abc\def\2.txt,那么它相对与C:\abc\1.txt的路径就是def\2.txt(也可以写成这种形式:.\def\2.txt)。&.&的意思是当前目录,也就是它所相对的文件所在的目录,在这里就是:C:\abc\。
&
在Java开发中,我们通常会创建两种工程:Java Project和JavaWeb Project。
&
一、在Java Project中,我们用的是相对路径。比如我们这里有一个Java工程:test,在test下边会自动创建两个目录:src和bin。
1、这时候我们如果在test下新建一个文件:1.txt ,那么我们在代码当中就可以这样读取它:File f = new File(&1.txt&),或者写成这样:File f = new File(&./1.txt&);
2、如果test下新建目录abc ,在abc 下新建文件2.txt,代码读取就是这样:File f = new File(&abc/2.txt&),或者写成这样:File f = new File(&./abc/2.txt&);
3、如果在src下新建文件3.txt,代码读取就是这样:File f = new File(&src/3.txt&),或者写成这样:File f = new File(&./src/3.txt&);由于src下的所有文件最终会被编译到bin目录下,所以直接读取src下的文件没有多大意义。
4、如果在src下有一个文件4.txt,我们知道它最终被编译到bin目录下,那么怎么去读取这个编译后的文件呢?有3种方式来读取。
4.1、直接读取
File f = new File(&bin/4.txt&),或者写成这样:File f = new File(&./bin/4.txt&);
由于bin目录(包括web应用中WEB-INF下的classes目录)统称为classpath(类路径),对于类路径下的文件,我们还可以采用下边两种方式来读取。
4.2、通过字节码对象读取
假如当前类为:Hello.java,它所在的包是:com.mac.util
在Hello.java中:String f = Hello.class.getResource(&/4.txt&).getPath();这种以&/&开头的是以绝对路径方式读取,意思是从bin目录下开始读取4.txt,/=D:\eclipse\workspace\test\bin\。
如果写成这样:String f = Hello.class.getResource(&4.txt&).getPath();这种不以&/&开头的是以相对路径方式读取,意思是从当前类所在的目录下开始读取4.txt,显然是读不到的,改成这样就可以了:String f = Hello.class.getResource(&../../../4.txt&).getPath();&..&代表当前目录的上一级目录,由于当前类所在的包是三层,所以这里使用了三次&..&。
同理:如果4.txt位于com.mac.util包下,与Hello.class处于同一目录。用绝对路径读就是这样:String f = Hello.class.getResource(&/com/mac/util/4.txt&).getPath();用相对路径读就是这样:String f = Hello.class.getResource(&4.txt&).getPath();注意:相对路径这种读取方式仅限于在 和被读取文件位于同一包下的类中可以这么读,其他包中的类是不能这样读取的。
综上所述:采用相对路径读取文件还要考虑当前类所在的位置,非常麻烦,所以对于classpath下的文件,我们统一采用绝对路径方式来读取。
4.3、通过类加载器读取
String f = 当前类名.class.getClassLoader().getResource(&4.txt&).getPath();&
注意:通过类加载器读取只能使用相对路径,如果使用绝对路径就读取不到了,比如改成这样:String f = 当前类名.class.getClassLoader().getResource(&/4.txt&).getPath();就不行。
如果把4.txt放到com.mac.util包下,读取代码:String f = 当前类名.class.getClassLoader().getResource(&com/mac/util/4.txt&).getPath();
可以看出,通过classloader读的话,它只会从classpath下开始读取,并且不能以&/&开头。
&
特别的是:1、当前类名.class.getResource()的返回值类型是URL;同时还有一个方法:当前类名.class.getResourceAsStream(),它的返回值类型是InputStream,是一个字节读取流。在开发中可以根据需要选择相应的方法。
2、要读取文件,文件首先必须真实存在,要不然返回的URL就等于Null。
&
二、在JavaWeb Project中,使用相对路径是读不到文件的,因为JavaWeb Project与Java Project不同,项目最终要部署在web服务器中,文件只能使用绝对路径来读取。
比如我使用的IDE是eclipse,建立一个web project:day01,在WebContent(工程根目录)下有一个文件1.txt,那么就可以通过ServletContext对象来读取了。
比如在servlet中,可以这样:getServletConfig().getServletContext().getRealPath(&/1.txt&);这种方式只是获取文件的路径字符串,并不会检查是否真的存在这样一个文件。
比如我把1.txt删除,执行上边代码仍然可以打出路径:...../apache-tomcat-7.0.42/webapps/day01/1.txt。并且这里的路径可以是绝对路径也可以是相对路径,取得的效果是一样的。比如写成这样也是可以的:getServletConfig().getServletContext().getRealPath(&1.txt&);
如果在WEB-INF下有一个文件2.txt,读取:getServletConfig().getServletContext().getRealPath(&/WEB-INF/2.txt&);也就是说通过ServletContext对象可以获取web工程根目录及其子目录(包括WEB-INF、classes等)所有文件的绝对路径。
当然,如果文件位于classpath(也就是classes目录)下,我们还可以通过另两种方式来读取。
一、通过字节码对象来读
这种方式与上边Java Project中通过字节码对象读取类路径下文件的方式相同,可参照上边的4.2。
二、通过类加载器来读
这种方式与上边Java Project中通过classloader读取类路径下文件的方式基本相同,可参照上边的4.3。 唯一不同的是:上边的路径只能是相对路径,也就是说不能以&/&开头。而在JavaWeb Project中,可以是相对路径,也可以是绝对路径,也就说你加不加&/&开头效果是一样的。&
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:java 文件读取问题_百度知道
java 文件读取问题
public void duqu (String name){
File file=new File(&d:\\&+name+&.txt&);
BufferedReader reader=
String [] str = new String [23];
for(int j=0;j&23;j++)
FileReader fr=new FileReader(file);
while( reader.read() != -1){
a = (char)reader.read();
if(a !='#')
str[i]=str[i]+a;
}应该是这里的问题 要怎么改呀
我有更好的答案
一个循环两次 reader.read(),只记录了一次
那要怎么用啊
while(&(a&=&(char)&reader.read())&!=&-1)看你的代码,文件好像是字符串格式的,用#分割字段可以用Scanner来读取,然后做字符串分割,更方便。类似这样:Scanner&sc&=&new&Scanner(file);while(sc.hasNext())&{&&&&String&line&=&sc.nextLine();&&&&String[]&items&=&line.split(&#&);}这样items数组就是读出来的一行内容
采纳率:75%
来自团队:
数组越界异常
学的时间不长,那应该怎么改呀
具体问题具体分析,你的代码呢?首先要看报错的行数,再跟踪代码,debug
本回答被网友采纳
数组越界了!!你调试一下你的算法,好像有数据超过了23了!!
为您推荐:
其他类似问题
java的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
我想把文件一行一行地读出来存入到ArrayList中,countChar是计算文件中的字符个数用的。countChar的结果是对的,可是我在while循环里面逐行打印字符串s后发现,只打印了文件的后半部分,前半部分没有打印出来。照理说countChar的结果是对的,那s就是有读到文件的每一行,那为什么到打印的时候就只有文件的一部分呢?
private void parse(File dir, int n) throws Exception{
File[] files = dir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
parse(file, n + 1); // 递归
if (file.getName().toLowerCase().endsWith(".java")) {
this.numberOfJavaSourceFiles++;
FileReader reader = new FileReader(file);
BufferedReader br = new BufferedReader(reader);
list.clear();//在收录文件前先清空list
String s = br.readLine();
//System.out.println("汪汪汪汪汪汪无无无无无无无无无无无无无");
while(s!=null) {
countChar = countChar+s.length()+1;//字符个数就是字符长度
//System.out.println(s);
list.add(s);//list存的是单个文件
s = br.readLine();
br.close();
import java.io.BufferedR
import java.io.FileR
import java.io.F
import java.util.ArrayL
public class AnalysisFileNumber {
private int numberOfJavaSourceF
//private long totalS
private int noteN
private int charInNoteN//注释中的字符数
private int countC//所有文件的字符数
private ArrayList&String&
//private S
public AnalysisFileNumber(File directory) throws Exception{
this.directory =
list=new ArrayList&String&();
this.parse(directory, 1);
private void parse(File dir, int n) throws Exception{
File[] files = dir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
parse(file, n + 1); // 递归
if (file.getName().toLowerCase().endsWith(".java")) {
this.numberOfJavaSourceFiles++;
FileReader reader = new FileReader(file);
BufferedReader br = new BufferedReader(reader);
list.clear();//在收录文件前先清空list
String s = br.readLine();
//System.out.println("汪汪汪汪汪汪无无无无无无无无无无无无无");
while(s!=null) {
countChar = countChar+s.length()+1;//字符个数就是字符长度
//System.out.println(s);
list.add(s);//list存的是单个文件
s = br.readLine();
br.close();
for(int i=0;i&list.size();i++) {
System.out.println(list.get(i));
AnalysisNoteNumber ann =new AnalysisNoteNumber(list);
this.noteNumber+=ann.getCountNote();//获取注释数
this.charInNoteNumber+=ann.getCharInNote();//获取注释中的字符数
list.clear();
list.addAll(ann.getList());//此时的list是文件中除注释和输出语句外的部分
//查找list中的关键字
AnalysisKeyNumber akn=new AnalysisKeyNumber(list);
public int getNumberOfJavaSourceFiles() {
return numberOfJavaSourceF
public long getCountChar() {
return countC
public int getNoteNumber() {
return noteN
public int getCharInNoteNumber() {
return charInNoteN
这个问题已被关闭,原因:与已有问题重复 -
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
如果是Eclipse/MyEclipse,控制台默认显示80000个字符.你这是显示不下.
这个问题已经被关闭无法回答
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。

我要回帖

更多关于 java读取文件乱码问题 的文章

 

随机推荐