【发布时间】:2021-12-06 05:04:40
【问题描述】:
我已使用以下代码将数组列表中的元素写入文件,以便稍后使用 StringTokenizer 检索。它适用于其他 3 个数组列表,但不知何故,它在使用 .nextToken() 读取时抛出异常,使用 .countTokens() 进行进一步故障排除表明文件中只有 1 个令牌。写入和读取的分隔符是相同的 - "," 与其他数组列表一样。
我很困惑为什么在我没有更改代码结构的情况下它不能像其他数组那样工作。
=================写入文件==================
public static void copy_TimeZonestoFile(ArrayList<AL_TimeZone> timezones, Context context){
try {
FileOutputStream fileOutputStream = context.openFileOutput("TimeZones.dat",Context.MODE_PRIVATE);
OutputStreamWriter writerFile = new OutputStreamWriter(fileOutputStream);
int TZsize = timezones.size();
for (int i = 0; i < TZsize; i++) {
writerFile.write(
timezones.get(i).getRegion() + "," +
timezones.get(i).getOffset() + "\n"
);
}
writerFile.flush();
writerFile.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
==========从文件中读取(嵌套在线程/可运行组合中)===========
public void run() {
if (fileTimeZones.exists()){
System.out.println("Timezone file exists. Loading.. File size is : " + fileTimeZones.length());
try{
savedTimeZoneList.clear();
BufferedReader reader = new BufferedReader(new InputStreamReader(openFileInput("TimeZones.dat")));
String lineFromTZfile = reader.readLine();
while (lineFromTZfile != null ){
StringTokenizer token = new StringTokenizer(lineFromTZfile,",");
AL_TimeZone timeZone = new AL_TimeZone(token.nextToken(),
token.nextToken());
savedTimeZoneList.add(timeZone);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}
}
}
===================Trace=======================
I/System.out: Timezone file exists. Loading.. File size is : 12373
W/System.err: java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(StringTokenizer.java:349)
at com.cryptotrac.trackerService$1R_loadTimeZones.run(trackerService.java:215)
W/System.err: at java.lang.Thread.run(Thread.java:764)
【问题讨论】:
-
AL_TimeZone 是什么样子的,它的 region 和 offset 字段的值是多少?
-
@Abra 从描述中我很确定在解析第二行时它是 NoSuchElementException 。但是,还是不错的建议。
-
AL_TimeZone 只是一个包含 2 个字符串元素的 ArrayList。比其他混合了 int、double、strings 等的人要简单得多。用相关的跟踪更新了问题。
标签: java fileoutputstream