2016-04-01 11 views
0

ノードjs expressを使用しています。そのjsファイルの同じディレクトリにあるテキストファイルにアクセスしようとしています。だから、ファイル構造は、iが試してみましたシンプルコード、ノードjs(Intellij)にファイルが見つかりません

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

console.log("Program Ended"); 

私は別のパスを試してみましたが、何も動作この

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

のようになります。あなたの情報のために、私はosとしてfedoraを使用しています。

私が得たエラーをして、

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

私は、ファイルの内容を読み取ると書き込みの両方ができるように、そのファイルにアクセスする方法についての提案は、歓迎されるだろう。詳細な答えを探しています。あなたは絶対パスを取得または相対パス(例えばIdeaProjects/Title/routes/input.txt)を使用するpath.resolve()のようなものを使用する必要がありますので、

+0

をあなたはファイル 'Input.txt'を持っていて、中に' input.txt'を使用していますコード。 –

+0

パスのエラーのほかに、コードにバグがあります。 'readFile'は非同期関数なので、コールバックなしでは結果を得ることができません。あなたの場合、それは 'readFileSync'でなければなりません。 – alexmac

答えて

3

ノードは、$HOMEよう~やシェル変数のような特別な意味を持っているいくつかの文字を解釈することはありません。

@ 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/Foodie/routes'、 '../input.txt')); – arvind

+0

前のコメントからfilereadsyncコードを使用しましたが、パスが定義されていないのと同じエラーが表示されます。何故ですか? – arvind

+0

'path.resolve()'を使用している場合は、まず 'path'モジュールへの参照を追加する必要があります:' var path = require( 'path'); '。 – mscdex