2016-04-01 37 views
0

我正在使用節點js express。我試圖訪問位於該js文件的同一目錄中的文本文件。因此,文件結構是這樣的在節點js(Intellij)中找不到文件

- ProjectFolder 
    | 
    - many modules and folders 
    - routes 
    | 
    - Index.js 
    - input.txt 

,我曾嘗試是Simple代碼,

var data = fs.readFile('~/IdeaProjects/Title/routes/input.txt'); 
console.log("Synchronous read: " + data.toString()); 

console.log("Program Ended"); 

我也嘗試不同的路徑,但沒有任何工程。爲了您的信息,我使用Fedora作爲操作系統。

我得到的錯誤是,

Error: ENOENT: no such file or directory, open '~/IdeaProjects/Title/routes/input.txt' 
at Error (native) 

有關如何訪問該文件,這樣我可以讀取和寫入文件的內容任何建議,都會受到歡迎。尋找詳細的答案。

+0

你有一個文件'Input.txt'和你在使用'input.txt'碼。 –

+0

除了路徑中的錯誤,您在代碼中有一個錯誤。 'readFile'是異步函數,所以你不能在沒有回調的情況下得到結果。你的情況應該是 - 'readFileSync'。 – alexmac

回答

3

節點不解釋某些字符有像~或shell變量,如$HOME特殊的意義,所以你需要使用像path.resolve()收穫的人絕對路徑或使用相對路徑(例如IdeaProjects/Title/routes/input.txt)。

另外,正如@Gothdo指出的那樣,文件名會有區別,會在區分大小寫的文件系統上引起問題。

您還需要更改fs.readFile()fs.readFileSync()或添加回調fs.readFile()像這樣:

fs.readFile('~/IdeaProjects/Title/routes/input.txt', function(err, data) { 
    if (err) throw err; 
    console.log("Synchronous read: " + data.toString()); 
    console.log("Program Ended"); 
}); 
+0

這很好嗎? fs.readFileSync(path.resolve( '〜/ IdeaProjects /美食家/路由', '../input.txt中')); – arvind

+0

我使用了以前評論中的filereadsync代碼,並且出現類似以下錯誤,路徑未定義。這是爲什麼? – arvind

+0

如果你使用'path.resolve()',你必須首先添加一個對'path'模塊的引用:'var path = require('path');'。 – mscdex