我正在尝试从文件中读取数据。我有以下代码。
public void ReadFile()
{
File sdcard = android.os.Environment.getExternalStorageDirectory();
File directory = new File(sdcard.getAbsolutePath()+ "/MyDirectory");
File file = new File(directory,"textfile1.txt");
try (FileInputStream fis = new FileInputStream(file)) {
char stringComma = new Character(',');
System.out.println("Total file size to read (in bytes) : "+ fis.available());
int content;
while ((content = fis.read()) != -1) {
// convert to char and display it
Log.d(TAG, "reading a file");
System.out.print((char) content);
}
} catch (IOException e) {
e.printStackTrace();
}
}
我的文件格式如下[textfile1.txt]
[12],84359768069 //some numbers
[34],56845745740
[44],36344679992
[99],46378467467
当我正在阅读此文件时,每个角色都会一次阅读。我想拆分它并存储在不同的字符串数组中,如
str1 = [12]
str2 = 84359768069
我怎么能做到这一点?
答案 0 :(得分:3)
您目前正在阅读字节,因为您正在使用InputStream
。这是第一件需要解决的问题 - 您应该使用Reader
来处理文本数据。最好的方法是将InputStream
包裹在InputStreamReader
。
接下来,听起来你想一次只读一个行,而不是一次只读一个字符。最简单的方法是使用BufferedReader
包裹InputStreamReader
。
(如果您使用的是Java 7+,使用Files.newBufferedReader
可以很好地实现所有这些 - 您只需要提供Path
和Charset
。直到Android支持,你需要手动进行包装。但它并不太痛苦。)
您一次只读一行,然后需要用逗号分隔该行 - 请查看使用String.split
。然后我建议你创建一个类来存储这两个单独的值。因此,每一行都将转换为您班级的一个实例。
最后,创建一个List<YourCustomClass>
并在阅读文件时添加它。
我们已经概述了如何实现每一步 - 希望足够的细节让你能够继续前进,但不要用足够的食物来阻碍你实际学习经验。
答案 1 :(得分:-1)
一个简单的解决方案是解析readed字符:
public void ReadFile()
{
File sdcard = android.os.Environment.getExternalStorageDirectory();
File directory = new File(sdcard.getAbsolutePath()+ "/MyDirectory");
File file = new File(directory,"textfile1.txt");
try (FileInputStream fis = new FileInputStream(file)) {
char stringComma = new Character(',');
System.out.println("Total file size to read (in bytes) : "+ fis.available());
int content;
String str1="";
String str2 = "";
boolean commaFound=false;
while ((content = fis.read()) != -1) {
// convert to char and display it
Log.d(TAG, "reading a file");
if ((char)content==',')
{
commaFound = true;
}
else if ((char)content=="\n")
{
System.out.printlnt("str1="+str1+"\nstr2="+str2);
commaFound = false;
str1 = "";
str2 = "";
}
else
{
if (commaFound)
{
str2 += (char)content;
}
else
{
str1 += (char)content;
}
}
System.out.print((char) content);
}
} catch (IOException e) {
e.printStackTrace();
}
}