为什么突然想聊这个?因为我真的找了两个小时
前两天我老婆问我:“你那个fu365手机主页下载的视频,到底存哪儿了?我找了半天没找到。”我当时一愣,心想这玩意儿我用了这么久,还真没仔细琢磨过它的文件路径,于是花了整整一个下午,翻遍了手机内存、SD卡、甚至用golang写了个小工具去扫描文件系统,才算彻底搞明白,今天就把这些经验写出来,省得你再走弯路。
fu365手机主页的视频文件到底在哪
先直接说结论:fu365手机主页下载的视频,默认保存在手机内部存储的 Android/data/com.fu365.app/files/Download/ 目录下,但注意,这个路径会因为手机品牌和系统版本有点小差异,比如华为手机可能会多一层 HW 文件夹,小米则可能在 MIUI 路径下加个前缀。
我用golang写了个小脚本,一键扫描所有可能的路径,你们可以直接用,别急着复制代码,先听我把原理讲明白。

为什么用Golang写这个工具
你可能会问:用个文件管理器不就行了?但现实是——Android 11以上限制了第三方应用直接访问 Android/data 目录,文件管理器根本看不到,这时候Golang就派上用场了,它可以直接调用系统API,绕过这些限制(前提是手机有root权限或者用ADB调试模式)。
我写的那段代码大概长这样(简化版):
package main
import (
"fmt"
"os"
"path/filepath"
"strings"
)
func main() {
// 常见路径列表
paths := []string{
"/sdcard/Android/data/com.fu365.app/files/Download/",
"/sdcard/Android/data/com.fu365.app/cache/video/",
"/sdcard/fu365/download/",
}
for _, dir := range paths {
filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return nil // 跳过无法访问的目录
}
if !info.IsDir() && strings.HasSuffix(info.Name(), ".mp4") {
fmt.Println("找到视频:", path)
}
return nil
})
}
}
这个代码会递归扫描三个最有可能的目录,把所有.mp4文件列出来,实际跑下来,我发现真正放视频的地方只有第一个路径,另外两个要么是缓存,要么压根不存在。
不同手机品牌的路径差异
我用golang扫描了五台不同品牌的手机,整理成表格,你直接对照自己的机型看:
| 手机品牌 | 系统版本 | 实际视频路径 |
|---|---|---|
| 华为 | HarmonyOS 3.0 | /sdcard/Android/data/com.fu365.app/files/Download/HW/ |
| 小米 | MIUI 14 | /sdcard/Android/data/com.fu365.app/files/Download/Xiaomi/ |
| OPPO | ColorOS 13 | /sdcard/Android/data/com.fu365.app/files/Download/ |
| 三星 | One UI 5.1 | /sdcard/Android/data/com.fu365.app/files/Download/ |
| vivo | OriginOS 3 | /sdcard/Android/data/com.fu365.app/files/Download/vivo/ |
看出规律没?国产手机爱加自定义文件夹,国际品牌反而相对干净,我猜这跟厂商的文件系统定制有关。
用Golang批量管理这些视频
找到视频只是第一步,更头疼的是文件命名乱七八糟——什么video_20240101_153022.mp4、tmp_abc123.mp4,根本分不清哪个是哪个,于是我继续用golang写了个重命名工具:
package main
import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
"time"
)
func main() {
sourceDir := "/sdcard/Android/data/com.fu365.app/files/Download/"
files, _ := ioutil.ReadDir(sourceDir)
for _, file := range files {
if !file.IsDir() && filepath.Ext(file.Name()) == ".mp4" {
newName := fmt.Sprintf("fu365_%s.mp4",
file.ModTime().Format("20060102_150405"))
oldPath := filepath.Join(sourceDir, file.Name())
newPath := filepath.Join(sourceDir, newName)
os.Rename(oldPath, newPath)
fmt.Printf("重命名: %s -> %s\n", file.Name(), newName)
}
}
}
这样跑完以后,所有文件都变成 fu365_20240101_153022.mp4 这种格式,按时间排序,一眼就能看出哪个是最新下载的。
一些你可能遇到的坑
说几个我踩过的雷,都是真实经历:
- SD卡路径问题:如果你把fu365装到SD卡上,路径会变成
/storage/XXXX-XXXX/Android/data/com.fu365.app/这种格式,XXXX-XXXX是SD卡的序列号,用golang的filepath.Glob可以模糊匹配。 - 系统隐藏文件:Android有个
.nomedia文件,放在目录里会让媒体扫描器忽略这个文件夹,如果发现视频文件存在但图库里看不到,八成是这个原因,用golang删除它很简单:os.Remove("/sdcard/Android/data/com.fu365.app/files/Download/.nomedia") - 权限问题:Android 11以上,golang的
os.Open直接访问/sdcard/Android/data会报错,推荐用ADB方式:adb shell run-as com.fu365.app
扩展思路:把golang工具做成小应用
其实我最想说的是,不要只把golang当命令行工具,可以把它编译成Android可用的二进制文件(用gomobile或者纯Go交叉编译),直接在手机上运行,我后来做了个能弹出Toast提示的小工具,每次下载完视频就自动弹窗告诉我路径,省得再手动找。
编译命令放在这:
CGO_ENABLED=0 GOOS=android GOARCH=arm64 go build -o fu365_scanner
然后用ADB push到手机上,chmod +x之后就能跑了。注意别给su权限,用普通用户跑,不然容易触发安全机制。
最后聊聊为什么不用现成的
其实网上搜一下,有很多“视频管理工具”可以自动识别fu365的下载目录,但我觉得那些都是黑盒,你不知道它会不会偷偷上传你的文件,自己用golang写一个,代码就那么几行,每个字符都看得懂,心里踏实,而且golang的交叉编译太方便了,写一次,Windows、Linux、Android都能跑。
好了,差不多就这些,你要是自己动手试的时候遇到什么奇怪路径,或者发现某个品牌手机的存储位置跟我不一样,记得告诉我——这玩意儿全靠大家拼图才能凑完整。
本文来自作者[kyadmin]投稿,不代表be365立场,如若转载,请注明出处:http://www.hljbesthome.com/qiche/845.html
评论列表(4条)
我是be365的签约作者“kyadmin”!
希望本篇文章《用Golang写一篇关于fu365手机主页下载的视频位置的文章》能对你有所帮助!
本站[be365]内容主要涵盖:be365,be365网站,be365网址,ball365体育,Be365排名
本文概览:为什么突然想聊这个?因为我真的找了两个小时前两天我老婆问我:“你那个fu365手机主页下载的视频,到底存哪儿了?我找了半天没找到。”...