2007年1月23日火曜日

Java Tips

Java Tips



GUI

* JTreeの内容をアップデートする
* SwingのLookAndFeelを切り替える
* JButtonに画像をつける
* レイアウトを設定するには
* メッセージダイアログボックスを表示する
* メニューを利用するには
* Swingコンポーネントの周りにスペースをつくるには
* JLabelの文字の色を変えるには
* メニューにショートカットキーを設定するには
* JTreeのルートノードの開閉アイコンを表示
* ActionEventでどのイベントが発生したかを処理するには

System

* Javaから他のプログラムを起動するには

Java Basic

* コンストラクタのオーバーロード
* クラス名、変数名、関数名に日本語を使用する
* JavaBeanをつくるには
* 要素をSortするには
* Windowsで実行可能なjarファイルを作成するには
* オブジェクトの生成を減らしてパフォーマンスをあげる
* クラスの型を調べるには
* Docletを作成するには
* Docletを実行するには
* クラスの名前文字列からクラスのインスタンスを作成するには
* タイプセーフなenum型を使用するには

Applet

* Appletの制限は
* Appletのロード時間を短くするには

文字列

* 数値を文字列に変換する
* 文字列を数値に変換する
* 文字列が数字かどうか調べるには
* StringBufferとString
* 2つのString文字列が同じかどうかを調べるには
* 数字の入ったStringを出力するときに気をつけることは?
* エスケープ文字を変換するには
* 文字列配列を初期化するには
* 一行ずつ読み込む
* Vectorから文字列配列に変換するには

JDBC

* JDBCを利用してMySQLに接続するには

Servlet

* HelloWorldを表示するには

File

* ディレクトリを作るには
* Fileの拡張子を得るには
* ディレクトリかどうかを調べるには
* Fileの拡張子抜きの名前を得る
* ファイルの移動を行うには

GUI


JTreeの内容をアップデートする


JTreeの内容をアップデートするには、TreeModelのreload()を使用します。


reloadと同時にツリーの表示も更新されます。

その後、scrollPathToVisible()で新しいノードを表示します。


// Initialize
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");
JTree tree = new JTree(root);

// Change
DefaultMutableTreeNode node = new DefaultMutableTreeNode("New");
root.add(node);

// Update
TreeModel treeModel = tree.getModel();
treeModel.reload();
tree.scrollPathToVisible(new TreePath(node.getPath()));
tree.setSelectionPath(new TreePath(categoryNode.getPath()));



SwingのLookAndFeelを切り替える


SwingのLookAndFeelを切り替えるには、setLookAndFeel()を使用します。

設定できる値は、

- com.sun.java.swing.plaf.metal.MetalLookAndFeel

- com.sun.java.swing.plaf.windows.WindowsLookAndFeel

- com.sun.java.swing.plaf.motif.MotifLookAndFeel

などです。


JFrame application = new JFrame();

try
{
// Set LookAndFeel
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

// Activate LookAndFeel toJFrame
SwingUtilities.updateComponentTreeUI(application);
application.pack();
} catch (Exception e) {
e.printStackTrace();
}


JButtonに画像をつける


JButtonに画像をつけるには、ImageIconを使用します。
ImageIcon icon = new ImageIcon("icon.jpg");
JButton button = new JButton("Button", icon);


レイアウトを設定するには


レイアウトを設定するには、setLayout()を使用します。


デフォルトはBorderLayoutですが、その他に、

BoxLayout(縦に並べる), FlowLayout(横に並べる), GridBagLayout(複雑なレイアウトを実現する)などを選択することができます。


JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

JLabel label1 = new JLabel("Hello");
JLabel label2 = new JLabel("World");

panel.add(label1);
panel.add(label2);


メッセージダイアログボックスを表示する


単純なメッセージダイアログボックスを表示するには、JOptionPane.showMessageDialog()を使用します。


JOptionPane.showMessageDialog(pane, "Dialog Message", "Dialog Title", JOptionPane.PLAIN_MESSAGE);


メニューを利用するには


メニューバーを追加するには、JMenuBar, JMenu, JMenuItemを使用します。

JMenuBarがメニューバー全体、JMenuがメニューバーに表示されるメニュー、JMenuItemがそれぞれのメニューを押したときに、表示される一つ一つのメニューアイテムになります。

この例では、ActionListenerを使って、JMenuItemが押されたときの、イベント処理も実装しています。

File - Menu1 を選択すると、ダイアログボックスが表示され、メッセージが表示されます。
public class Test extends JFrame implements ActionListener
{
JMenuBar menuBar;
public Test()
{
menuBar = new JMenuBar();

menuFile = new JMenu("File", false);
menuBar.add(menuFile);
menuItem = new JMenuItem("Menu1");
menuItem.setActionCommand("ACTION_MENU1");
menuItem.addActionListener(this);
menuFile.add(menuItem);
menuFile.addSeparator();

setJMenuBar(menuBar);
}

public void actionPerformed(ActionEvent ae)
{
if(ae.getActionCommand().equals("ATION_MENU1"))
{
JOptionPane.showMessageDialog(this, "Hello Menu1", "Message", JOptionPane.PLAIN_MESSAGE);
}
}
}


Swingコンポーネントの周りにスペースをつくるには


Swingコンポーネントの周りにスペースをつくるには、setBorder()を使用します。


setBorder()の引数として使用する、BorderはBorderFactryで作成します。

ただのスペースの場合は以下の例のようにcreateEmptyBorder()を使用し、マージンの幅を指定します。


JPanel panel = new JPanel();
panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));


JLabelの文字の色を変えるには


JLabelの文字の色を変えるには、setForeground()を使用します。

引数には、Colorを入力します。
JLabel label = new JLabel("Hello");
label.setForeground(Color.red);


メニューにショートカットキーを設定するには


メニューにショートカットキーを設定するには、JMenuItemのsetAccelerator()を使用します。

以下の例では、ショートカットキーにALT+1を割り当てています。
JMenuItem menuItem = new JMenuItem("Push Here");
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1, ActionEvent.ALT_MASK));


JTreeのルートノードの開閉アイコンを表示


通常、同じレベルに複数の親アイテムがないと開閉アイコンが表示されませんが、setShowsRootHandles()を使用すると表示されるようになります。
JTree root = new DefaultMutableTreeNode("FAQ");
treeModel = new DefaultTreeModel(root);
tree = new JTree(treeModel);
tree.setRootVisible(true);
tree.setShowsRootHandles(true);


ActionEventでどのイベントが発生したかを処理するには


ActionListenerのactionPerformedメソッドが、ActionEventを引数にとりますが、どのUser Interfaceからのイベント通知かを知る必要があります。


そのためには、getActionCommandメソッドを使用します。


public void actionPerformed(ActionEvent event)
{
if(event.getActionCommand().equals("C->F"))
{
int tempFahr = (int)((Double.parseDouble(tempCelsius.getText())) * 1.8 + 32);
fahrenheitLabel.setText(tempFahr + " Fahrenheit");
} else {
int inv_tempCels = (int)((Double.parseDouble(inv_tempFahrenheit.getText())));
inv_celsiusLabel.setText((inv_tempCels -32)/1.8 + " Celsius");
}
}


System


Javaから他のプログラムを起動するには


Windwos上でJavaからexeファイルやbatファイルを起動するには以下のようにします。

pathToAppがStringで実行する外部アプリケーションのPathが入っていると仮定します。

もし、プロセスが終了するまで待ちたい場合は、waitForを使用します。


// declaration
Process process;
String pathToApp;

// application execution
if (pathToApp.endsWith(".exe"))
{
process = Runtime.getRuntime().exec("cmd /c " + pathToApp);
}
else
{
process = Runtime.getRuntime().exec("cmd /c start " + pathToApp);
}

// wait until the execution has completed
waitFor = process.waitFor();


Java Basic


コンストラクタのオーバーロード


コンストラクタのオーバーロードをするには、引数の違うコンストラクタを定義します。

この際に、ひとつのコンストラクタから別のコンストラクタを呼び出したい場合は、this()を使用します。
class HellowWorld
{
String name = "";

HellowWorld()
{
this("");
}

HellowWorld(String name)
{
System.out.println("Hellow World " + name);
}
}


クラス名、変数名、関数名に日本語を使用する


Javaでは、クラス名、変数名、関数名に日本語を使用しても動きます。



public class 日本語
{
static String こんにちは = "こんにちは";

public static void main (String[] argv)
{
print日本語(こんにちは);
}

private static void print日本語 (String s)
{
System.out.println(s);
}
}


JavaBeanをつくるには


JavaBeanはデータをやり取りするためのコンポーネントとして利用される、Java標準の形式です。

基本的には、次の4点を備えていることが条件です。



1.Serializableインターフェースを実装していること



2.引数のないコンストラクタを備えていること

 これは、コンストラクタを定義にない場合は、自動的に生成されます。



3.メンバ変数はすべてprivateとし、アクセスするために、Getter, Setterのメソッドを実装していること。

 以下の例にあるように、メンバ変数(例ではnumber)をprivateにし、アクセスするための関数として、getNumberとsetNumberを定義します。メソッドの名前はこのように、get + 変数名、set + 変数名である必要があります。



3.JavaBeanのフラグがたっていること。具体的には、Jarファイル化するときにマニフェストファイルで指定します。

 例:

 Java-Bean: True
import java.io.*;

class NumberBean implements Serializable
{
private int number;

public void setNumber(int number)
{
this.number = number;
}

public int getNumber()
{
return number;
}
}


要素をSortするには


Collectionsクラスのsortメソッドを使用すると、要素をソートすることができます。


Vector内のObjectがComparable interfaceを実装しているときは、簡単にソートできる。


import java.util.*;

class Test
{
public static void main(String[] argv)
{
Vector list = new Vector();
Integer i1 = new Integer(5);
Integer i2 = new Integer(1);
Integer i3 = new Integer(8);
list.add(i1);
list.add(i2);
list.add(i3);
System.out.println("Unsorted: " + list);
Collections.sort(list);
System.out.println("Sorted: " + list);
}
}


Windowsで実行可能なjarファイルを作成するには


1. Manifest-Fileを作成します。これは、単なるテキストファイルです。

一行、

Main-Class: MainClass

のように、メインのクラスを書きます。

:とクラス名の間には、半角スペース、最後は改行をすることを注意してください。

2. Manifest.mfというファイル名でセーブします。

3. 以下のコマンドを実行します。


> jar cvmf Manifest.mf MyApplication.jar *.class


オブジェクトの生成を減らしてパフォーマンスをあげる


Javaの基本的な知識ですが、Javaでの一番のコストはたいていの場合オブジェクトの作成です。




以下のコードでは、fastのほうがslowの約2倍の速度で動作します。

どちらもIntegerのインスタンスを作成していますが、fastのほうはStringオブジェクトを再利用しています。

これに対してslowは毎回Stringオブジェクトを作成しているので、そのコスト分時間がかかっています。






public class NewTest
{
static void main (String[] args)
{
NewTest test = new NewTest();
Stopwatch sw = new Stopwatch();

sw.start();
test.slow();
sw.stop();
System.out.println("slow: " + sw.getTime() + "ms");

sw.start();
test.fast();
sw.stop();
System.out.println("fast: " + sw.getTime() + "ms");
}

public void slow()
{
// slow
for(int i=1; i < 1000000; i++)
{
String s = new String(Integer.toString(i));
}
}

public void fast()
{
// faster
String s = "";
for(int i=1; i < 1000000; i++)
{
s = Integer.toString(i);
}
}

}

/**
* Stopwatch.java
*/

class Stopwatch
{

private long start = 0; // Time of starting
private long stop = 0; // Time of stopping

public void start()
{
start = System.currentTimeMillis();
}

public void stop()
{
stop = System.currentTimeMillis();
}

public long getTime()
{
if(start == 0 || stop == 0)
{
System.err.println("You didn't start or stop Stopwatch.");
}

return stop - start;
}
}



クラスの型を調べるには


JavaにはClass型というクラスがあります。

これを利用することで、実行時にクラスの型をしらべることが可能です。

以下の例では、
class MyClass
{
}

MyClass myClass = new MyClass;
try
{
if(myClass.getClass() == Class.forName("MyClass"))
{
System.out.println("MyClass is detected.");
}
}
catch(Exception exception)
{
exception.printStackTrace();
}


Docletを作成するには


DocletはJavadoc toolを使って、Javaのソースコードのコメントを処理するためのプログラムです。


Javadoc toolではJava APIドキュメントを得ることができますが、Docletを使用することで自分の自由にコメントの処理を作ることが出来ます。

以下の例では、getTargetMethodメソッドが@mycommentというコメントのつけられたメソッド名の一覧を返します。

コンパイルには、j2sdkのlib\tools.jarをクラスパスに指定する必要があります。
import java.util.Vector;

import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.MethodDoc;
import com.sun.javadoc.RootDoc;
import com.sun.javadoc.Tag;

public class ExtractClientMethodsDoclet
{
// class variable, not instance variable
public static Vector targetMethods = new Vector();

// cannot make instance
private ExtractClientMethodsDoclet()
{
}

public static boolean start(RootDoc root)
{
String tagName = "myComment";
writeContents(root.classes(), tagName);
return true;
}

private static void writeContents(ClassDoc[] classes, String tagName)
{
targetMethods = new Vector();

// for each class
for (int i=0; i < classes.length; i++)
{
// for each methods
MethodDoc[] methods = classes[i].methods();
for (int j=0; j < methods.length; j++)
{
// for each tags
Tag[] tags = methods[j].tags(tagName);
if (tags.length > 0)
{
//System.out.println(methods[j].name());
targetMethods.add(methods[j].name().toString());
}
}
}
}

public static String[] getTargetMethods()
{
String[] methods = new String[targetMethods.size()];
for(int i=0; i < targetMethods.size(); i++)
{
methods[i] = (String)targetMethods.elementAt(i);
}
return methods;
}
}



Docletを実行するには


Docletを実行するには、コマンドラインからJavadocのオプションとして指定する方法もありますが、ここではJavaプログラム内からDocletを実行する方法を紹介します。

com.sun.tools.javadoc.Main.executeメソッドを使用します。この方法はJ2SE ver.1.4以降で有効です。
public class ExtractClientMethods
{
public static String[] getTargetMethods(String filename)
{
String[] javadocargs = {"-doclet", "compiler.java2js.ExtractClientMethodsDoclet", filename};
com.sun.tools.javadoc.Main.execute(javadocargs);
return ExtractClientMethodsDoclet.getTargetMethods();
}
}



クラスの名前文字列からクラスのインスタンスを作成するには


Javaにはリフレクションという機能があり、クラスの名前やメソッド名などを変数として扱うことができます。

クラスの名前文字列からクラスのインスタンスを作成するには、ClassクラスのforNameとnewInstanceメソッドを使用します。

これによって、どのクラスを作成するかを実行時に決めることが可能になります。



このような考えかたの応用にDI(Dependency Injection)があります。


Class myClass = Class.forName("MyClass");
MyClass myClassInstance = (MyClass)myClass.newInstance();


タイプセーフなenum型を使用するには


Javaにはenum型がありません。特殊なルールにしたがってクラスを作成することで、タイプセーフなenumを作成することができます。

JavaSE 5.0からは、タイプセーフenumが言語サポートされました。


//タイプセーフ enum
//Java 1.4以前

public final class ResourceType {

private final String name;

private ResourceType(String name)
{
this.name = name;
}

public String toString()
{
return name;
}

public static final ResourceType LABOR = new ResourceType("LABOR");
public static final ResourceType MATERIAL = new ResourceType("MATERIAL");
public static final ResourceType EQUIPMENT = new ResourceType("EQUIPMENT");
public static final ResourceType EXPENSE = new ResourceType("EXPENSE");

}


//JavaSE 5.0からは、タイプセーフenumが言語サポートされました。

public enum Suit {LABOR, MATERIAL, EQUIPMENT, EXPENSE}


Applet


Appletの制限は


Appletの主な制限は3つあります。


一つは、クライアントサイドのファイルの読み書きができないこと。

次に、ダウンロードした元のホスト以外とのネットワークコネクションができないこと。

最後に、Appletはクライアントの他のプログラムへのアクセスが制限されています。

いずれも、Appletがクライアントや他のコンピュータのデータに勝手にアクセスできないよう、セキュリティを考慮した設計になっているためです。

これをsandboxモデルと呼んでいます。

限られた範囲の権限内で、実行するためです。

そのため、Appletは非常にセキュリティの高い、安心して使えるブラウザ上のソフトウェアとなっています。



Appletのロード時間を短くするには


Appletのロード時間を短くするには、classファイルをjarファイルすることで実現できます。

Jarファイルは圧縮されているため、普通にclassファイルをダウンロードしてくるより、半分くらいの容量ですみます。

Jar化するには、通常通りコマンドラインから、

jar cf HelloApplet.jar HelloApplet.class

のようにします。

htmlからjar化されたAppletを実行するには、以下のようにarchive属性を指定します。



文字列


数値を文字列に変換する


数値を文字列に変換するにはtoString()を使用します。
String s = Integer(100).toString();


文字列を数値に変換する


文字列を数値に変換するには、ラッパークラスを使用します。


Javaのラッパークラスには、Byte, Integer, Short, Long, Float, Doubleがあります。
String s = "100";

Byte.parseByte(s);
Short.parseShort(s);
Integer.parseInt(s);
Long.parseLong(s);
Float.parseFloat(s);
Double.parseDouble(s);


文字列が数字かどうか調べるには


文字列が数字かどうかしらべるには、IntegerクラスのparseInt()を使用します。


String input = "12345"

try
{
int i = Integer.parseInt(input);
} catch (Exception e) {
System.out.pintln("The input is not valid as a number.");
}


StringBufferとString


Javaには、文字列を扱う基本的なクラスにStringとStringBufferがあります。

Stringは固定長、StringBufferは可変長の文字列を扱うようにできています。

主な違いは、文字列をどんどん追加していくようなときは、StringBufferを使ったほうが、Stringを使うよりもはるかに高速に処理できます。

たとえば、文字列を追加していくには、StringBuffer.append(String string)を使用します。


String result = "";
StringBuffer sb = new StringBufffer();
sb.append("First");
sb.append(" ");
sb.append("Second");
sb.append("");
sb.append("Third");
sb.append("");
sb.append("End");
result = sb.toString();


2つのString文字列が同じかどうかを調べるには


Javaの初心者のよくやってしまう間違いのひとつに、String文字列の比較があります。

Stringの文字列が同じかどうかを比較するときは、==ではなく、equals()を使用します。


==は「オブジェクト」が同じかどうかを比較するもので、「オブジェクトの中身」が同じかどうかを調べるものではありません

文字列の比較をする時、ほとんどの場合==では正しい結果を返しません。
String a = new String("hello");
String b = new String("hello");
if(a.equals(b))
{
System.out.println("a and b contain the same string.");
}



数字の入ったStringを出力するときに気をつけることは?


以下の例での二つの出力が異なることに注意しましょう。
System.out.println(2 + 2 + "=result");
System.out.println("result=" + 2 + 2);


エスケープ文字を変換するには


stringのエスケープ文字をstringをプリントしたときにエスケープ文字になるように変換するコードです。

コードからコードを出力するときなどに使えます。


public class StringConverter
{
static public String toEscapeString(String original)
{
String result = "";

for(int i=0; i < original.length(); i++)
{
switch(original.charAt(i))
{
case '\b':
result += "\\b";break;
case '\t':
result += "\\t";break;
case '\n':
result += "\\n";break;
case '\f':
result += "\\f";break;
case '\r':
result += "\\r";break;
case '\"':
result += "\\\"";break;
case '\'':
result += "\\\'";break;
case '\\':
result += "\\\\";break;
default:
result += original.charAt(i);
}
}

return result;
}
}



文字列配列を初期化するには


文字列配列を初期化するには、いくつかの方法がありますが、結構良く使われるだろう初期化の方法を以下に紹介します。
final public String[] cars = {"Toyota","Nissan","Honda", "Ford", "Dodge", "BMW"};


一行ずつ読み込む


StringReaderとBufferedReaderを使うと、テキストを一行づつ読むことができます。
BufferedReader reader = new BufferedReader(new StringReader(input));

String line;

while((line = reader.readLine()) != null)
{
System.out.println(line);
}


Vectorから文字列配列に変換するには


Vectorから文字列配列String[]に変換するには、copyInto()メソッドを使用します。



String[] strings = new String[vector.size()];
vector.copyInto(strings);


JDBC


JDBCを利用してMySQLに接続するには


1. MySQLをセットアップします。

2. MySQL JDBC Driverを取得します。

3. .jarファイルにclasspathを通します。

4. 以下のようにコードを書き実行します。



日本語をShift-JISで扱うには、別にcharactor-set = Shift-JISを設定してやる必要があります。
// Sample application for JDBC connection to MySql import

import java.sql.*;

public class JdbcTest
{
public static void main(String[] args)
{
try
{
// Loading driver class
Class.forName("org.gjt.mm.mysql.Driver"); // MySQL

// Connect to the database
Connection con =

// only for MySQL
DriverManager.getConnection("jdbc:mysql://localhost/person", "username", "password");

// Create a statement object
Statement stmt = con.createStatement();
String sql = "SELECT * FROM employee";

// Execute the query and get a result
ResultSet rs = stmt.executeQuery(sql);

// Loop with the number of found data
while(rs.next())
{
// Id
int id = rs.getInt("id");
// name
String name = rs.getString("name");
// birthday
String birthday = rs.getString("birthday");
// memo
String memo = rs.getString("memo");
// Desplay data
System.out.println(id + " " + name + " " + birthday + " " + memo);
}
// Disconnect from the database
stmt.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}


Servlet


HelloWorldを表示するには


ServletをTomcatで実行する基本的な手順です。

Windows上での操作を想定しています。




1. JDKをインストールします。2003/12現在で1.4.2が最新です。

2. 環境変数JAVA_HOMEを設定します。通常の値は、c:\j2sdk1.4.2です。

3. Tomcatをインストールします。2003/12現在で5.0が最新です。

4. 環境変数TOMCAT_HOMEを設定します。値はC:\Program Files\Apache Software Foundation\Tomcat 5.0です。

5. 環境変数CLASSPATHを設定します。値にTomcatの%TOMCAT_HOME%\common\lib\servlet-api.jarが設定されていることを確認して下さい。

6. 環境変数PATHを設定します。値にC:\j2sdk\bin

7. 以下のJavaプログラムを作成。ファイル名はHelloWorldServlet.javaにしてください。作成したHelloWorldServlet.classファイルは後で使います。

8. コマンドラインからjavac HelloWorldServlet.javaとタイプしてコンパイルします。うまくコンパイルできない場合はCLASSPATHをチェックしてください。

9. Tomcatのwebappsフォルダの下にHelloWorldServletというフォルダを作成します。

10. HelloWorldServletフォルダの下にWEB-INFというフォルダを作ります。

11. web.xmlを以下のように作成し、WEB-INFのなかにおきます。

12. WEB-INFフォルダの下にclassesフォルダとlibフォルダを作ります。

13. コンパイルしてできたHelloWorldServlet.classファイルをTomcatの\HelloWorldServlet\WEB-INF\classesの下にコピーします。

14. Tomcatを再起動して設定を有効にします。

15. ブラウザからhttp://localhost:8081/HelloWorldServlet/HelloWorldServletへアクセスします。HelloWorld Servlet!と無事表示されるはずです。


// HelloWorldServlet.java
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class HelloWorldServlet extends HttpServlet
{
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
PrintWriter out = res.getWriter();
out.println("HelloWorld Servlet!");
}
}


// web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<servlet>
<servlet-name>HelloWorldServlet</servlet-name>
<servlet-class>HelloWorldServlet</servlet-class>

</servlet>


<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/HelloWorldServlet</url-pattern>

</servlet-mapping>

</web-app>


File


ディレクトリを作るには


ディレクトリを作るには、File.mkdir()を使用します。
import java.io.*;

try
{
File newDir = new newDir("MyDirectory");
newDir.mkdir();
}
catch(Exception e)
{
e.printStackTrace();
}


Fileの拡張子を得るには


Fileの拡張子を得るには、次のようなメソッドを利用します。

拡張子が.javaの場合はjavaを返します。
public String getExtension(File file)
{
String fileName = file.getName();
int index = fileName.lastIndexOf('.');
if (index!=-1)
{
return fileName.substring(index + 1, fileName.length());
}
return "";
}


ディレクトリかどうかを調べるには


ディレクトリかどうかを調べるにはisDirectory()メソッドを使用します。
File file = new File("C:\Windows"); // Directory

if(file.isDirectory() == true)
{
System.out.println("Directory!!");
}


Fileの拡張子抜きの名前を得る


Fileの拡張子抜きの名前を得るには、次のようなメソッドを使用します。
public String getNameWithoutExtension(File file)
{
String fileName = file.getName();
int index = fileName.lastIndexOf('.');
if (index!=-1)
{
return fileName.substring(0, index);
}
return "";
}



ファイルの移動を行うには


ファイルの移動はFileクラスのrenameToを使って行います。
java.io.File file = new java.io.File( "c:\\abc.txt" ); // 移動元
java.io.File file2 = new java.io.File( "c:\\tmp\\abc.txt" ); // 移動先
boolean ret = file.renameTo( file2 );


1 件のコメント:

brightwoods さんのコメント...

java编程中的斐波纳契数
Computing Fibonacci numbers