node.jsでファイルの情報を取得する

ファイルの情報を取得するには、次の関数を使用します。

fs.statSync(path)

fs.statSync(path)は、引数にファイルのパスを受け取り、fs.Statsオブジェクトを返します。

const fs = require('fs');

const path = 'sample.txt';
const stats = fs.statSync(path);

// ファイルサイズ
console.log(stats.size);
// 最終アクセス時刻
console.log(stats.atime);
// 最終修正時刻
console.log(stats.mtime);
// 最終状態変更時刻
console.log(stats.ctime);

fs.stat(path, callback)

fs.stat(path, callback)は、引数にファイルのパスとコールバック関数を受け取ります。

コールバック関数は引数にErrorオブジェクトとfs.Statsオブジェクトを受け取る関数です。

const fs = require('fs');

const path = 'sample.txt';

fs.stat(path, (err, stats) => {
  if (err) {
    throw err;
  }
  // ファイルサイズ
  console.log(stats.size);
  // 最終アクセス時刻
  console.log(stats.atime);
  // 最終修正時刻
  console.log(stats.mtime);
  // 最終状態変更時刻
  console.log(stats.ctime);
});

node.jsでファイルをコピーする

node.jsのバージョン8.5.0以降では、ファイルをコピーする以下の関数を使用できます。

fs.copyFileSync(src, dest[, flags])

fs.copyFileSync()は、srcをdestに同期コピーします。

srcはコピーするファイルのファイル名、
destはコピー先のファイル名です。

flagsはオプションの引数で、fs.constants.COPYFILE_EXCLを指定すると、コピー先にすでにファイルが存在する場合は例外を投げます。
未指定の場合は上書きします。

次のコードはファイルをコピーします。
コピー先にすでにファイルが存在する場合は上書きします。

const fs = require('fs');

const src = 'source.txt';
const dest = 'destination.txt';

fs.copyFileSync(src, dest);

次のコードは、ファイルをコピーします。
コピー先にすでにファイルが存在する場合はエラーにします。

const fs = require('fs');

const src = 'source.txt';
const dest = 'destination.txt';

try {
  fs.copyFileSync(src, dest, fs.constants.COPYFILE_EXCL);
  console.log('ファイルをコピーしました。');
} catch (error) {
  console.log(error);
}

fs.copyFile(src, dest[, flags], callback)

ファイルを非同期でコピーします。

srcはコピーするファイルのファイル名、
destはコピー先のファイル名です。

flagsはオプションの引数で、fs.constants.COPYFILE_EXCLを指定すると、コピー先にすでにファイルが存在する場合は例外を投げます。
未指定の場合は上書きします。

次のコードはファイルをコピーします。
コピー先にすでにファイルが存在する場合は上書きします。

const fs = require('fs');

const src = 'source.txt';
const dest = 'destination.txt';

fs.copyFile(src, dest, (err) => {
  if (err) {
    throw err;
  } else {
    console.log('ファイルをコピーしました。');
  }
});

次のコードは、ファイルをコピーします。
コピー先にすでにファイルが存在する場合はエラーにします。

const fs = require('fs');

const src = 'source.txt';
const dest = 'destination.txt';

fs.copyFile(src, dest, fs.constants.COPYFILE_EXCL, (err) => {
  if (err) {
    throw err;
  } else {
    console.log('ファイルをコピーしました。');
  }
});

node.jsでパスの操作

node.jsでパスを操作するサンプルコードです。

実行結果は、Windowsで実行したときのものです。

絶対パスに変換する

const path = require('path');

const dir = path.resolve('C:/temp/path/sample.txt', '../dat');
console.log(dir); // => C:\temp\path\dat

相対パスを取得する

fromからtoへの相対パスを取得します。

const path = require('path');

const from = 'C:/temp/path/sample.txt';
const to = 'C:/temp/foo/bar';
console.log(path.relative(from, to)); // => ..\..\foo\bar

パスを分解する

const path = require('path');

const filename = 'C:/temp/path/sample.txt';

// ディレクトリ名を取得する
console.log(path.dirname(filename)); // => C:/temp/path

// ファイル名を取得する
console.log(path.basename(filename)); // => sample.txt

// ファイル名から拡張子を削除する
console.log(path.basename(filename, path.extname(filename))); // => sample

// 拡張子を取得する
console.log(path.extname(filename)); // => .txt

まとめて取得できます。

const path = require('path');

const parsedPath = path.parse('C:/temp/path/sample.txt');
console.log(parsedPath.root); // => C:/
console.log(parsedPath.dir); // => C:/temp/path
console.log(parsedPath.base); // => sample.txt
console.log(parsedPath.ext); // => .txt
console.log(parsedPath.name); // => sample

絶対パスかどうかを判定する

const path = require('path');

console.log(path.isAbsolute('/foo/bar')); // => true
console.log(path.isAbsolute('C:/foo/..')); // => true
console.log(path.isAbsolute('foo/bar')); // => false

パスを結合して、正規化したパスを取得する

const path = require('path');

console.log(path.join('/foo', 'bar', 'baz/asdf', 'quux', '..')); // => \foo\bar\baz\asdf
console.log(path.join('C:/foo', 'bar', '..', 'baz')); // => C:\foo\baz

パスを正規化する

const path = require('path');

console.log(path.normalize('/foo/bar//baz/asdf/quux/..')); // => \foo\bar\baz\asdf
console.log(path.normalize('C:\\temp\\\\foo\\bar\\..\\')); // => C:\temp\foo\

Linux Mint 17.3にnode.jsをインストールする

node.jsを直接インストールせず、node.jsのバージョン管理ソフトnodebrewを使ってnode.jsをインストールする。

nodebrewのインストール

公式サイトを参考にしてインストールする

curlがインストールされていなければインストールする

sudo apt-get install -y curl

curlを使ってインストールする

curl -L git.io/nodebrew | perl - setup

インストールが終わると、次のようなメッセージが表示される。

========================================
Export a path to nodebrew:

export PATH=$HOME/.nodebrew/current/bin:$PATH
========================================

.bashrcを開き、次の行を追加する。

export PATH=$HOME/.nodebrew/current/bin:$PATH

Linux Mintにはホームフォルダーに.bashrcがなかった。
/etc/bash.bashrcをコピーして使うらしい。
参考:http://forums.linuxmint-jp.net/viewtopic.php?f=2&t=1019

追加したら、設定を反映する。

source ~/.bashrc

インストールできているかを確認する。

nodebrew help

node.jsのインストール

node.jsのバージョンを確認する

nodebrew ls-remote

Node.jsのウェブサイトを見ると、v4.4.5がLTSで「Recommended For Most Users」とあったので、v4.4.5をインストールする。

nodebrew install-binary v4.4.5

バージョンを指定せず、最新版をインストールすることもできる。

nodebrew install-binary latest # latest version
nodebrew install-binary stable # stable version

インストールできたか確認する。

nodebrew ls

使用するバージョンを指定する

nodebrew use v4.4.5

node.jsが使えるかを確認する

node -v

以上でnode.jsをインストール出来ました。