如何在不知道其扩展名但是知道全名的情况下打开文件?

时间:2015-12-28 10:16:12

标签: android android-intent

 Intent tostart = new Intent(Intent.ACTION_VIEW);
                tostart.setDataAndType(Uri.parse(video_path+".***"), "video/*");
                startActivity(tostart);

我们说我有一个文件路径

/mnt/sdcard/video/my_birthday_moovie001

' my_birthday_moovie001'可以是.mkv.mpg.mkv。我试图添加"。***"到文件路径但我仍然无法打开文件。

5 个答案:

答案 0 :(得分:1)

好吧,我读了你在db中存储你的路径的注释没有扩展,有很多扩展存在,所以android不能自动选择扩展你必须创建一些方法来检测扩展。

以下是一种在您的情况下最匹配的强大方式,但在已知扩展名的正确情况下不推荐

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor
from toster.items import DjangoItem

class DjangoSpider(CrawlSpider):
name = "django"
allowed_domains = ["www.toster.ru"]
start_urls = [
'http://www.toster.ru/tag/django/questions',
]

rules = [
    Rule(LinkExtractor(
        allow=['/tag/django/questions\?page=\d']),
        callback='parse_item',
        follow=True)
]


def parse_item(self, response):

    selector_list = response.css('div.thing')

    for selector in selector_list:
        item = DjangoItem()
        item['title'] = selector.xpath('div/h2/a/text()').extract()

        yield item

现在在你的代码中播放一首歌

public String chk_path(String filePath)
{
//create array of extensions
String[] ext=new String[]{".mkv",".mpg"}; //You can add more as you require

//Iterate through array and check your path which extension with your path exists

String path=null;
for(int i=0;i<ext.Length;i++)
{
  File file = new File(filePath+ext[i]);
  if(file.exists())
    { 
     //if it exists then combine the extension
     path=filePath+ext[i];
     break;
    }
}
return path; 
}

答案 1 :(得分:1)

我正在发表评论

  

您可以比较路径是否与任何文件名匹配(它不包含扩展名),然后如果它匹配,就可以得到它。

你可以这样做:

获取目录路径

File extStore = Environment.getExternalStorageDirectory();

在我放置my_birthday_moovie001的示例中设置文件名unnamed,但将其更改为

String NameOfFile = "unnamed";

添加videos,我把它Downloads但你可以改变它

String PathWithFolder = extStore + "/Download/";

创建一个列出路径中所有文件的方法

private List<String> getListFiles(File parentDir) {
    ArrayList<String> inFiles = new ArrayList<String>();
    File[] files = parentDir.listFiles();
    for (File file : files) {
        if (file.isDirectory()) {
            inFiles.addAll(getListFiles(file));
        } else {
            String AbsolutePath = file.getAbsolutePath();
            //Get the file name ex : unnamed.jpg
            String nameofFile = AbsolutePath.substring(AbsolutePath.lastIndexOf("/") + 1, AbsolutePath.length());
            //Remove the .jpg --> Output unnamed
            String fileNameWithoutExtension = nameofFile.substring(0, nameofFile.lastIndexOf('.'));
            //Add each file
            inFiles.add(fileNameWithoutExtension);
        }
    }
    return inFiles;
}

您获得了执行此操作的文件的名称

List<String> files = getListFiles(new File(PathWithFolder));

只需添加for即可查找与您的file

匹配的内容
for (int i = 0; i<=files.size()-1; i++){
   if(PathWithFolder.equals(files.get(i))) {
       Toast.makeText(MainActivity.this, "You got it!", Toast.LENGTH_SHORT).show();
   }
   else{
       Toast.makeText(MainActivity.this, "You don't.", Toast.LENGTH_SHORT).show();
    }
}

如果您想要获取路径并执行@Zain Ul Abidin建议并在getListFiles()方法上进行比较,请添加以下内容:

String fileExtension = nameofFile.substring(nameofFile.lastIndexOf("."));

希望它有所帮助。

答案 2 :(得分:0)

从另一个问题:

考虑来自Apache Ant的DirectoryScanner:

DirectoryScanner scanner = new DirectoryScanner();
scanner.setIncludes(new String[]{"**/*.java"});
scanner.setBasedir("C:/Temp");
scanner.setCaseSensitive(false);
scanner.scan();
String[] files = scanner.getIncludedFiles();

你需要引用ant.jar(对于ant 1.7.1,大约1.3 MB)。

然后,运行文件数组并检查  if files [i] .include(yourfile)  yourfile = files [i]

答案 3 :(得分:0)

您可以尝试这种方式,首先获取文件名和扩展名,然后最后进行比较和实现。像这样:

示例文件名是04chamelon,扩展名是.png:

File f = new File("/mnt/storage/sdcard/Pictures/04chameleon");
        File yourDir = new File("/mnt/storage/sdcard/Pictures");
        nametwo = f.getName();
        for (File fa : yourDir.listFiles()) {
            if (fa.isFile())
                fa.getName();
            String path = fa.getName(); // getting name and extension
            filextension = path.substring(path.lastIndexOf(".") + 1); // seperating extension
            name1 = fa.getName();
            int pos = name1.lastIndexOf(".");
            if (pos > 0) {
                name1 = name1.substring(0, pos);
            }
        }
        if (name1.equals(nametwo)) {
            Intent tostart = new Intent(Intent.ACTION_VIEW);
            tostart.setDataAndType(Uri.parse(f + "." + filextension), "image/*");
            //tostart.setDataAndType(Uri.parse(f + "." + filextension), "video/*");
            startActivity(tostart);
        }

答案 4 :(得分:0)

使用最新的ContentResolver,您可以使用检测文件类型的contentResolver.getType(uri)功能轻松地完成这项工作。

private fun getIntentForFile(intent: Intent, filePath: String, context: Context): Intent { 
    val uri = FileProvider.getUriForFile(                                                  
        context,                                                                           
        context.applicationContext.packageName + ".fileprovider",                          
        File(filePath)                                                                     
    )                                                                                      
    intent.putExtra(Intent.EXTRA_STREAM, uri)                                              
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)                                 

    intent.setDataAndType(uri, context.contentResolver.getType(uri))                       
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                                        
    return intent                                                                          
}