我试图从原始目录中的一个原始文本文件中提取数据,方法是读取该文件,获取冒号后面的字符串,并将其存储在一个class变量中。原始文本文件如下:
category:AI
photo:ai4.png
title:'I will destroy humans': Humanoid AI robot Sophia gets Saudi citizenship
website:https://www.deccanchronicle.com/lifestyle/viral-and-trending/111117/i-will-destroy-humans-humanoid-ai-robot-sophia-gets-saudi-citizenship.html
date:11-11-2017
category:cybersecurity
photo:cyber3.png
title:WhatsApp and Telegram media files aren't so secure
website:https://www.theverge.com/2019/7/15/20692184/whatsapp-telegram-media-files-android-messaging-encryption
date:15-07-2019我希望能够读取第一行并检查它是什么类别,如果类别是照片,我希望将ai4.png存储在与其相关的类变量中。在它到达date之后,日期数据存储在date类变量中。它将实例化一个新类,并用一个新类再次开始该过程。
类如下所示:
public class Link{
private String title;
private String imageName;
private String url;
Link(String t,String i,String u){
this.title=t;
this.imageName=i;
this.url=u;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getImageName() {
return imageName;
}
public void setImageName(String imageName) {
this.imageName = imageName;
}
public String getURL(){
return url;
}
public void setURL(String url){
this.url = url;
}
}因此,通过读取文本文件,如果标题前面有冒号,它会将冒号后面的标题文本分配给title类变量。
对不起,我是新的android和Java的一般,任何帮助是感激的。感谢您的阅读!
发布于 2019-10-28 20:58:51
我找到了一个解决方案。
InputStream input = getResources().openRawResource(R.raw.news_items);
String _final="";
Scanner scanner = new Scanner(input);
while(scanner.hasNext()){
String line = scanner.nextLine();
String[] pieces = line.split(":",2);
_final+=pieces[1]+"\n";
}首先,我从raw目录中获取原始文本文件,并将其存储在InputStream输入变量下。
之后,我将InputStream变量传递到一个扫描器变量中,根据我的理解将其作为文本文件读取,如果我错了,请纠正我!
在while循环中,虽然它不是文件结束(EOF),但是获取文本行。在冒号(:)处拆分它,因为我还想得到Web URL,所以在冒号的第一个实例处拆分,因此.split(":",2)中的2。
最后,添加_final文本变量,这纯粹是为了测试。我可以修改它,以便将这些变量传递到类变量中。
发布于 2019-10-28 21:02:16
在我看来,你的问题由两部分组成。
First one是从安卓存储中读取文件,
的第二个是读取文本并解析成类对象的数组/列表。
对于first part,我建议查看下面的stackoverflow答案:
How can I read a text file in Android?
对于第二部分,使用以下代码片段:
String fileContents = "category:AI\n" +
"photo:ai4.png\n" +
"title:'I will destroy humans': Humanoid AI robot Sophia gets Saudi citizenship\n" +
"website:https://www.deccanchronicle.com/lifestyle/viral-and-trending/111117/i-will-destroy-humans-humanoid-ai-robot-sophia-gets-saudi-citizenship.html\n" +
"date:11-11-2017\n" +
"category:cybersecurity\n" +
"photo:cyber3.png\n" +
"title:WhatsApp and Telegram media files aren't so secure\n" +
"website:https://www.theverge.com/2019/7/15/20692184/whatsapp-telegram-media-files-android-messaging-encryption\n" +
"date:15-07-2019";
String[] arrayOfContents = fileContents.split("\n");
List<Link> arrayOfLinks = new ArrayList<>();
boolean isFirstSection = true;
Link link = new Link();
for (String content : arrayOfContents) {
String[] splitVal = content.split(":");
switch (splitVal[0].toLowerCase()) {
case "category":
if (isFirstSection) {
isFirstSection = false;
} else {
arrayOfLinks.add(link);
}
link = new Link();
link.setCategory(splitVal[1]);
break;
case "date":
link.setDate(splitVal[1]);
break;
case "photo":
link.setPhoto(splitVal[1]);
break;
case "title":
link.setTitle(splitVal[1]);
break;
case "website":
link.setWebsite(splitVal[1]);
break;
default:
break;
}
}
arrayOfLinks.add(link);fileContents变量将实际具有您从存储中读取的文本文件内容。
另外,下面是Class Link,它将在最后保存所有数据:
public class Link {
private String Category;
private String Photo;
private String Title;
private String Website;
private Date Date;
public Link() {
}
public void setCategory(String category) {
Category = category;
}
public void setPhoto(String photo) {
Photo = photo;
}
public void setTitle(String title) {
Title = title;
}
public void setWebsite(String website) {
Website = website;
}
public void setDate(String date) {
try {
Date = new SimpleDateFormat("dd-MM-yyyy").parse(date);
} catch (Exception e) {
Date = null;
}
}}最后,您将在arrayOfLinks变量中获得完整的数据。
希望这能解决你的问题。
https://stackoverflow.com/questions/58590720
复制相似问题