解决了:我最初发布的代码很好,我只是尝试从资产目录中读取一个txt文件而不在“path”字符串中添加目录名称,假设“getAssets()”获取所有资产资产中的子目录。
我正在制作一款使用名称和描述卡的游戏,名称和说明是从资产文件夹中的.txt文件中读取的。该方法使得它读取'$'和'#'之间的所有内容作为名称,并使用'@'和'#'作为描述。我在Eclipse(控制台应用程序)中编写了原始方法,它就像一个魅力。然后我将它转移到Android Studio,添加上下文(因为方法在类文件中)和AssetManager等,并遵循其他类似stackoverflow问题的说明,但由于某种原因它只是不起作用。
以下是代码:
public void readFile(String p) throws IOException {
// Path of the directory
String path = new String(p);
// AssetManager opens assets
AssetManager am = con.getAssets();
// Open file
InputStream i_s = am.open(path);
// StringBuilders store the text read for specific members
StringBuilder _name = new StringBuilder(""); // Records name of card from file
StringBuilder _desc = new StringBuilder(""); // Records description of card from file
// "c" stores each character at a time
char c;
// Main loop that reads entire file
while(i_s.available() > 0) {
c = (char) i_s.read();
if(c=='$') {
c = (char) i_s.read(); // Sends to next character so it doesn't save '$'
while(c!='#') // Loop saves everything between '$' and '#'
{_name.append(c); c = (char) i_s.read();}
}
else if(c=='@') {
c = (char) i_s.read(); // Sends to next character so it doesn't save '@'
while(c!='#') // Loop saves everything between '@' and '#'
{_desc.append(c); c = (char) i_s.read();}
}
}
i_s.close();
// Sets read info into Class properties
this.setName(_name);
this.setDesc(_desc);
}
该方法在CardAction卡中,是Card的子类。 set方法在Card类中。
public void setName(StringBuilder sb) {
this.name = sb.toString();
}
public void setDesc(StringBuilder sb) {
this.desc = sb.toString();
}
每次测试时(通过调用name和desc的get方法),它都会返回空字符串。我在这里做错了什么?
附加信息:所有Card子类继承Card超类的上下文“con”,它将主活动中的上下文作为Card构造函数中的参数传递,因此我100%确定Context和AssetManager工作正常。
编辑:从主要活动调用readFile方法的代码
String str;
Turn t = new Turn(3, 40, t_o_d, names, true, 1, con);
// chooseFile returns String of randomly chosen file
// name from the assets folder (randomly "draw" card), works
str = t.chooseFile(1);
CardAction ca = new CardAction(con); //Passes context as parameter for constructor
try {ca.readFile(str);}
catch(IOException e1) {}
// cardName and cardDesc are TextViews I set just for testing the readFile method
cardName.setVisibility(View.VISIBLE);
cardDesc.setVisibility(View.VISIBLE);
cardName.setText(ca.getName());
cardDesc.setText(ca.getDesc());
答案 0 :(得分:0)
解决。方法很好,我的问题是我试图在资源中打开位于自己文件夹中的txt文件,所以我只是在方法中添加了另一个String参数(用于目录)并连接它们(在它们之间添加“/”)
嗯,考虑到这是一个解决完全其他问题的方法,我仍然很高兴这样做,所以任何人都在努力逐字逐句阅读文件可以参考我最初发布的代码:)