Failing to open file, am I linking it wrong? Or is Android Studio not seeing it for some reason?

后端 未结 3 427
忘了有多久
忘了有多久 2021-01-27 12:09

I have a simple .txt file with just a couple lines in right now, each line has a word then a comma then another word, representing a very simplistic username , password bank. Fo

相关标签:
3条回答
  • 2021-01-27 12:36

    You're referencing wrong to file in assets folder. It has to be smth like:

    file:///android_asset/myfoldername/myfilename
    

    in your particular case it's file:///android_asset/passwords.txt, though you have to keep in mind that it's always read only file

    0 讨论(0)
  • 2021-01-27 12:58

    Thanks to @CommonsWare I was able to achieve what I was trying to do by using InputStream and then also IOUtils to read everything into the List.

    try {
            InputStream iS = this.getAssets().open("passwords.txt");
            List<String> user_password = IOUtils.readLines(iS);
    
            @SuppressWarnings("unchecked") List<Credentials> credentials = (List<Credentials>) CollectionUtils.collect(user_password, new Transformer() {
                @Override
                public Object transform(Object input) {
                    String cred = (String) input;
                    String parsed[] = cred.split(",");
                    return new Credentials(parsed[0], parsed[1]);
                }
            });
            user = (Credentials) CollectionUtils.find(credentials, new Predicate() {
                @Override
                public boolean evaluate(Object object) {
                    Credentials c = (Credentials) object;
                    return c.getUserName().equals(userName);
                }
            });
        }catch (IOException e){
            System.out.print(e);
        }
    
    0 讨论(0)
  • 2021-01-27 12:59
    final String PATH = "src\\main\\assets\\passwords.txt";
    

    That's not going to work. Android is not Windows, and an Android device is not your Windows development PC.

    First, \ is the Windows path separator. On OS X, Linux, and Android, the path separator is /.

    Second, src\main\assets\passwords.txt is a file in your project. It is not a file on the filesystem of the Android device.

    To access assets, use AssetManager to open an InputStream(). You can get an AssetManager by calling getAssets() on any handy Context, such as your activity. Then, for your asset, call open("passwords.txt") on the AssetManager to get the InputStream, that you can then use to read in the data.

    0 讨论(0)
提交回复
热议问题