じぶんメモ

プログラミングのメモ、日常のメモとか。

Javaでのファイルアップロード

Javaでファイルアップロードを実装する方法を調べた。
FileUtilsのcopyFileが使い勝手が良さそう。

*画面側

<input type="file" name="inputFile />

*Java

    public String upload() throws Exception {
        // ファイルアップロードのテスト
        String destPath = "/usr/local/tomcat/webapps/upload";
        String myFileFileName = "uploadFile";

        try{
            File destFile  = new File(destPath, myFileFileName);
            FileUtils.copyFile(getInputFile(), destFile);
        }catch(IOException e){
            e.printStackTrace();
            return ERROR;
        }
    }

    /**
     * 取込ファイルを取得
     * @return 取込ファイル
     */
    public File getInputFile() {
        return inputFile;
    }

    /**
     * 取込ファイルを設定
     * @return 取込ファイル
     */
    public void setInputFile(File inputFile) {
        this.inputFile = inputFile;
    }

Javaでバイト数での空白埋め

空白埋めにはString.format("%10s", value)を使用すれば良いが、
String.format()はマルチバイトも1文字として認識するため、
固定長ファイル出力など、バイト数での空白埋めをするには個別で実装する必要がある。

以下文字をSJISとして扱った場合の空白埋め

public class Test{

     public static void main(String []args){
        String value = "テスト";
        value = fillUpSpace(value, 10);
        System.out.println(value);             //"テスト    "として出力される。
     }
 
     public static String fillUpSpace(String val, int num) {
        String fillUppedString = val; 
        int len = 0;

        try {
            // SJISでのサイズ取得 
            len = val.getBytes("sjis").length;

            if (num <= len) {
                // 引数の桁より少ない場合は引数の桁に切り捨てる
                fillUppedString = new String(val.getBytes("sjis"), 0, num, "sjis");
            } else {
                for(int i = 0 ; i < (num - len); i++) {
                    fillUppedString = fillUppedString + " ";
                }
            }
        } catch(Exception e) {
          return "";  
        }
        
        return fillUppedString;
     }
     
}

Javaで文字コードを指定したファイル出力

文字コードを指定してファイル出力する際は、OutputStreamWriterを使用する。

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;

public void outputFile() {
  FileOutputStream outputStream = null;
  OutputStreamWriter outputStreamWriter = null;

  try {
    outputStream = new FileOutputStream("ファイル名.txt");
    // エンコード
    // EUC-JPやUTF-8など
    outputStreamWriter = new OutputStreamWriter(outputStream, "SJIS");

    // 改行されないので改行コードをいれる
    outputStreamWriter.write("1行目\n");
    outputStreamWriter.write("2行目\n");

    outputStreamWriter.close();

  } catch (UnsupportedEncodingException e) {
      System.out.print(e);
  } catch (IOException e) {
      System.out.print(e);
  } finally {
    if (outputStreamWriter != null) {
      outputStreamWriter.close();
    }
    if (outputStream != null) {
      outputStream();
    }
  }
}

EasyWineでWindowsのアプリケーションを動かす

以下のサイトからEasyWine.appをダウンロードする。

matome.naver.jp

ダウンロードしたら、起動するとWindows風のエクスプローラが立ち上がる。 エクスプローラから参照できる場所にwindowsのexeファイルを設置しておけば、windowsのアプリケーションを実行することができる。

VMからvagrantのboxを作成する

1.vagrant用ユーザ設定をする

ゲストOS(VM)側で作業をする。 vagrantユーザを作成し、sudo設定をしておく。

# groupadd vagrant
# useradd vagrant -g vagrant -G wheel
# echo "vagrant ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers # sudo設定
# passwd vagrant
ユーザー vagrant のパスワードを変更。
新しいパスワード:←vagrantと設定する。警告が出るかもしれんが無視
# visudo
Defaults requirettyをコメントアウトし、sudo するときのTTY要求をしないようにする。

2.sshの設定をする

ssh用の鍵の設定をする。

# mkdir -pm 700 /home/vagrant/.ssh
# mkdir -p /vagrant
# wget --no-check-certificate "https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub" -O /home/vagrant/.ssh/authorized_keys
# chmod 600 /home/vagrant/.ssh/authorized_keys
# chown vagrant:vagrant /home/vagrant/.ssh

3.ネットワークの設定

ネットワークアダプタの設定をしておく。 vagrant up時のインターフェースマッピングエラー防止。

# ln -s -f /dev/null /etc/udev/rules.d/70-persistent-net.rules
# rm -rf /dev/.udev/
# rm -f /lib/udev/rules.d/75-persistent-net-generator.rules

4.boxの作成

ホストOSに戻りboxを作成する。

# vagrant package --base vm名

5.作成したboxの使用法

# vagrant box add box名 作成したboxファイル名
# vagrant init
# vagrant up

参考文献

Vagrantのネットワークが起動しないときは · THINKING MEGANE