golang中關(guān)于目錄與文件名等操作都在os這個包中,具體的創(chuàng)建目錄都是通過Mkdir和MkdirAll這2個函數(shù)來實現(xiàn)的,這兩個函數(shù)用法一致
創(chuàng)新互聯(lián)建站是一家專業(yè)提供婺源企業(yè)網(wǎng)站建設(shè),專注與做網(wǎng)站、網(wǎng)站設(shè)計、html5、小程序制作等業(yè)務(wù)。10年已為婺源眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進行中。
os.Mkdir(dirName?string,?perm?FileMode)
dirName即要創(chuàng)建的目錄(文件夾路徑),可以是絕對路徑,也可以是相對路徑(相對于GOPATH)
perm表示創(chuàng)建的目錄的權(quán)限,如0777(讀r權(quán)限值為4,寫權(quán)限w值為2,執(zhí)行權(quán)限x值為1)
如:我要在/data/program/goapp這個目錄下創(chuàng)建一個golang這個子目錄,示例如下:
package?main
import?(
"os"
"fmt"
)
func?main()?{
err?:=?os.Mkdir("/data/program/goapp/golang",?0666)
if?err?!=?nil?{
fmt.Println(err)
}
}
注:Mkdir和MkdirAll的區(qū)別
Mkdir創(chuàng)建目錄,它的父級目錄必須是存在的,不然創(chuàng)建會失敗
MkdirAll可以遞歸創(chuàng)建目錄,即只要根目錄存在即可,如下:
err?:=?os.MkdirAll("/data/program/goapp/golang/test/hello",?0766)
if?err?!=?nil?{
fmt.Println(err)
}
本例中:/data/program/goapp是已經(jīng)存在的目錄,而子目錄golang/test/hello是不存在,此時要使用MkdirAll來創(chuàng)建
使用go語言遞歸查找指定目錄下的文件,根據(jù)正則匹配篩選出需要的文件,并且忽略指定的目錄
先使用 ioutil.ReadDir 遍歷出指定目錄下的文件,再遞歸進目錄中遍歷,問題的關(guān)鍵在于識別出文件為目錄, fs.FileInfo 中有一個 IsDir() 函數(shù)可以識別是否是目錄
正則匹配使用 regexp.MatchString ,regexp中有很多正則操作的工具,如根據(jù)正則替換字符串中的指定字符
從fs -ls從列出來的文件看,這個文件夾/user/root/input是通過root用戶創(chuàng)建的。說明你在從本地文件系統(tǒng)拷貝input目錄到hdfs系統(tǒng)的時候,不是采用的hadoop用戶,而是用root用戶執(zhí)行的拷貝命令,你可能忘記切換用戶了,可以刪除現(xiàn)在的input目錄(采用root用戶運行hadoop的刪除命令,或者不刪除也沒關(guān)系),重新使用hadoop用戶把input導入到hdfs系統(tǒng)中試試看。
另外,實際上應(yīng)用的時候是需要關(guān)注hdfs中文件的目錄結(jié)構(gòu)的。你現(xiàn)在采用的是默認的方式,缺省會放/user/${user.name}目錄下。
在把本地文件導入到hdfs的時候,是可以指定傳到什么目錄的,比如:
#創(chuàng)建input目錄
sh bin/hadoop fs -mkdir /user/hadoop/input
#把myfile.txt導入到hdfs的input目錄下
sh bin/hadoop fs –put /usr/hadoop/mydata/myfile.txt /user/hadoop/input
1.先把要導入的包go build - go install
2.接著在要導入的方法中以: 項目名 / 導入的文件名 ?的形式導入即可(如下方test(項目名) / chiid(文件名))