按下按钮时如何从资产文件夹中读取随机文本文件?

时间:2019-02-15 13:25:52

标签: java android

我正在尝试构建一个应用程序,该应用程序每次按下按钮都会显示一个随机文本文件。我已经想出了如何从资产文件夹中获取单个文本文件,但我想不出如何使应用程序随机选择一个文本文件。我需要添加什么才能允许此操作?

对此我有点陌生,并且到目前为止,一直没有任何运气,试图找到一种解释。

public class MainActivity extends AppCompatActivity {

Button random_story;

TextView story_text;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    random_story = (Button) findViewById(R.id.random_story);

    story_text = (TextView) findViewById(R.id.story_text);

    random_story.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String text = "";
            try {
                InputStream is = getAssets().open("1.txt");
                int size = is.available();
                byte[] buffer = new byte[size];
                is.read(buffer);
                is.close();
                text = new String(buffer);
            } catch (IOException ex){
                ex.printStackTrace();
            }
            story_text.setText(text);
        }
    });

}

}

当前代码始终获得“ 1.txt”。资产文件夹包含1、2、3、4、5等,我希望按下按钮以随机选择其中之一。

2 个答案:

答案 0 :(得分:0)

生成随机数并使用

Random r = new Random();
int fileStart = 1; // if first file name is 1.text
int fileEnd = 11; // if last file name is 10.txt
int randomFile = r.nextInt(fileEnd - fileStart) + fileStart;

现在使用它

InputStream is = getAssets().open(randomFile + ".txt");

注意::仅当文件名按顺序排列时,此解决方案才有效。

答案 1 :(得分:0)

使用Random类并生成一个介于1和末尾之间的数字:

其中最大为5,​​最小为1,格式为:

InvalidTemplate. Unable to process template language expressions in action 'Extract' inputs at line '1' and column '1292': 'The template language expression 'triggerBody()?['ID']' cannot be evaluated because property 'ID' cannot be selected. Property selection is not supported on values of type 'Integer'. Please see https://aka.ms/logicexpressions for usage details.'.

例如:

nextInt(max - min + 1) + min;

或者如果数字本身是随机的,则将它们添加到Random random = new Random(); int num = random.nextInt(5 - 1 + 1) + 1; InputStream is = getAssets().open(num + ".txt"); 并从该List获取随机数:

List