2013-07-08 10 views
5

La directory tutti i miei file sono in è: '/ usr/home/Jordan' e ho molti file in là (nella directory stessa, ma un file denominato con estensione .txtCome ottenere il primo file con estensione .txt in una directory con nodejs?

Con nodejs. e fs, voglio mettere il primo file (o qualsiasi file) con estensione txt in "mytxtfilepath". Ho solo un singolo file .txt nell'intera directory (tra molti altri file ma con estensioni diverse) Il singolo .txt file potrebbe essere chiamato nulla, non posso garantire quello che il nome sarà in un dato momento, solo che termina in .txt:

var homedir = "/usr/home/jordan"; 
var mytxtfilepath=homedir + "???????"; 
fs.readfile(mytxtfilepath, function(err,data) { 
    console.log(data); 
}); 

Come faccio a mettere il percorso corretto per il mio file txt senza hardcoding il nome di il file txt se stesso?

risposta

9
var files = fs.readdirSync(homedir); 
var path = require('path'); 

for(var i in files) { 
    if(path.extname(files[i]) === ".txt") { 
     //do something 
    } 
} 
+0

ho più file nella directory, ma solo un file .txt. – Rolando

+0

Controlla la risposta modificata – everconfusedGuy

+0

files.filter (/./. Test, /\.txt$/i)[0] è più veloce e più facile ... – dandavis

0

È possibile utilizzare fs.readdir per elencare i file e trovare quello che termina con .txt:

var myPath = "/usr/home/jordan"; 
fs.readdir(path, function(fileNames) { 
    for(var i = 0; i < fileNames.length; i++) { 
     var fileName = fileNames[i]; 
     if(path.extname(fileName) === ".txt") { 
     fs.readfile(path.join(myPath,fileName), function(err,data) { 
      console.log(data); 
     }); 
     break; 
     } 
    } 
    } 
); 

Nota questo richiede path quindi aggiungere var path = require("path") in alto.

0

È possibile utilizzare fs.readdir e path.extname

var fs = require('fs') 
    , path = require('path'); 

function getFileWithExtensionName(dir, ext) { 
    fs.readdir(dir, function(files){ 
    for (var i = 0; i < files.length; i++) { 
     if (path.extname(files[i]) === '.' + ext) 
     return files[i] 
    } 
    }); 
} 

var homedir = "/usr/home/jordan"; 
var mytxtfilepath= getFileWithExtensionName(homedir, 'txt') 
fs.readfile(mytxtfilepath, function(err,data) { 
    console.log(data); 
}); 
+0

Ottengo 'TypeError: path deve essere una stringa' usando questo metodo (dopo aver regolato quanto sopra per usare' readFile' invece di 'readfile') –

1

È possibile utilizzare Glob Module pure. Funziona bene per me!

var glob = require('glob'); 
var myPath= "/fileFolder/**/*.txt"; 

glob(myPath, function (er, files) { 
    // Files is an array of filenames. 
    // Do something with files. 
}) 
0

La soluzione pigro:

npm install --save readdir 

e poi

const {read} = require('readdir'); 
read("/usr/home/jordan", "**/*.txt", (err, paths) => 
    console.log(paths) 
); 
Problemi correlati