Javaでクラスパスからテキストファイルを実際に読み取る方法


366

システム変数CLASSPATHに設定されているテキストファイルを読み込もうとしています。ユーザー変数ではありません。

以下のようにファイルへの入力ストリームを取得しようとしています:

ファイル(D:\myDir)のディレクトリをCLASSPATHに置き、以下を試してください:

InputStream in = this.getClass().getClassLoader().getResourceAsStream("SomeTextFile.txt");
InputStream in = this.getClass().getClassLoader().getResourceAsStream("/SomeTextFile.txt");
InputStream in = this.getClass().getClassLoader().getResourceAsStream("//SomeTextFile.txt");

D:\myDir\SomeTextFile.txtCLASSPATH にファイル()のフルパスを配置し、上記の3行のコードを試してください。

しかし、残念ながらどれも動作nullしておらず、私は常にInputStreamに入りinます。

回答:


605

同じクラスローダーによってロードされたクラスからクラスパス上のディレクトリを使用すると、次のいずれかを使用できるはずです。

// From ClassLoader, all paths are "absolute" already - there's no context
// from which they could be relative. Therefore you don't need a leading slash.
InputStream in = this.getClass().getClassLoader()
                                .getResourceAsStream("SomeTextFile.txt");
// From Class, the path is relative to the package of the class unless
// you include a leading slash, so if you don't want to use the current
// package, include a slash like this:
InputStream in = this.getClass().getResourceAsStream("/SomeTextFile.txt");

それらが機能していない場合は、何か他のことが間違っていることを示唆しています。

たとえば、次のコードを見てください。

package dummy;

import java.io.*;

public class Test
{
    public static void main(String[] args)
    {
        InputStream stream = Test.class.getResourceAsStream("/SomeTextFile.txt");
        System.out.println(stream != null);
        stream = Test.class.getClassLoader().getResourceAsStream("SomeTextFile.txt");
        System.out.println(stream != null);
    }
}

そして、このディレクトリ構造:

code
    dummy
          Test.class
txt
    SomeTextFile.txt

そして、(私がLinuxボックスにいるので、Unixパス区切り文字を使用しています):

java -classpath code:txt dummy.Test

結果:

true
true

2
相対パスと絶対パスが混在しています。「/」で始まるパスは絶対パスです(つまり、CLASSPATHにリストされているものから始まります)。他のすべてのパスは、呼び出すクラスのパッケージに関連していますgetResourceAsStream()
Aaron Digulla

13
いいえ、あなた私の例を破った。コメントをわかりやすくするために編集しますが、重要なのは、ClassLoaderを使用すると、すべてのパスがすでに絶対パスであると想定されていることです。それらが相対的であることは何もありません。
ジョンスキート

6
また、Java.IO.File.Separatorを使用しないでください。Windowsでは動作しません。このコードをWindowsで実行している場合は、「\」ではなく「/」である必要があります
Pradhan

28
@プラダン:いいえ、使用すべきではありませんFile.Separator- ファイルを要求するのではなく、リソースを要求するのです。関連する抽象化はファイルシステムではないことを理解することが重要です。
Jon Skeet 2013年

1
@jagdpanzer:まあ、基本的には同じクラスローダーによってロードされるクラス専用です。これは、Class.getResourceAsStreamを呼び出すのに本当に便利なメソッドですがClassLoader.getResourceAsStream、「相対」リソースの追加機能があるためです。絶対リソースを指定している場合、同じクラスローダーを使用する呼び出しは同じことを行います。
Jon Skeet

115

Spring Framework を使用する場合(ユーティリティまたはコンテナーのコレクションとして-後者の機能を使用する必要はありません)、Resource抽象化を簡単に使用できます。

Resource resource = new ClassPathResource("com/example/Foo.class");

Resourceインターフェースを介して、InputStreamURLURI、またはFileとしてリソースにアクセスできます。リソースタイプをファイルシステムリソースなどに変更するのは、インスタンスを変更するだけです。


6
これをファイルI / Oで使用する方法のサンプルコードを提供していただけませんか?私は見つけることができませんまともな明示的かつ直接的なインターネットでそれを使用する方法についての方法を:((((

魅力のように機能します。提供される1つのライナーで十分です。ストリームから文字列を取得する方法がわからない場合は、他の例のストリーム解析を使用してください。
ジョセフラスト

リソース変数をどうするかを正確に理解するのに少し苦労しました。答えをもう少し詳しく編集しました
DavidZemon

私はすでにSpringを使用していて、「純粋なJava」の方法を試していました。getResource、getResourceAsStreamの違いなど、私を殺していました。これはカプセル化の完璧な例なので、気にする必要はありません。
TinkerTenorSoftwareGuy 2017年

1
プロジェクトをjarにパッケージ化する場合は、InputStreamを使用する必要があることに注意してください。ファイルを使用するとIDEで機能しますが、jarからテストすると失敗します。本当にファイルが必要な場合は、stackoverflow.com
questions / 4317035 /…を

58

これは、Java 7 NIOを使用して、クラスパス上のテキストファイルのすべての行を読み取る方法です。

...
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;

...

Files.readAllLines(
    Paths.get(this.getClass().getResource("res.txt").toURI()), Charset.defaultCharset());

これは、それを行う方法の例です。必要に応じて改善する必要があります。この例は、ファイルが実際にクラスパスに存在する場合にのみ機能します。そうでない場合は、getResource()がnullを返し、.toURI()が呼び出されたときにNullPointerExceptionがスローされます。

また、Java 7以降、文字セットを指定する便利な方法の1つjava.nio.charset.StandardCharsets は、で定義された定数を使用することです(これらは、javadocsによると、に、「Javaプラットフォームのすべての実装で利用できることが保証されています」)。

したがって、ファイルのエンコーディングがUTF-8であることがわかっている場合は、文字セットを明示的に指定します StandardCharsets.UTF_8


1
NIOソリューションをありがとう-この素晴らしいAPIを使用する人は少ないので残念です。
mvreijn 2015

7
単一の文字列を読み取るには、試してください。new String(Files.readAllBytes(Paths.get(MyClass.class.getResource(resource).toURI())));
Theo Briscoe

2
SpringやCommons IOのような依存関係を必要としないため、私にとって最適なソリューションです。
バーニー

1
リソースファイルがjar、たとえばmavenモジュール内にある場合、これは失敗します。その場合は、あなたのようなものを使用する必要がありますSpringのをStreamUtils.copyToString
Somu

26

してみてください

InputStream in = this.getClass().getResourceAsStream("/SomeTextFile.txt");

以下のための唯一のクラスローダので、あなたの試みはうまくいきませんでしたあなたのクラスがクラスパスからロードすることができます。Javaシステム自体のクラスローダーを使用しました。


「/」についてはわかりません。この場合、相対パスの方が効果的です。
VonC

3
「/」なしで使用すると、「this」のパッケージ内でファイルが検索されます。
タンジェンス2009

1
InputStreamファイル= this.getClass()。getResourceAsStream( "SomeTextFile.txt"); InputStreamファイル= this.getClass()。getResourceAsStream( "/ SomeTextFile.txt"); InputStreamファイル= this.getClass()。getResourceAsStream( "// SomeTextFile.txt"); 上記のいずれも機能しなかった:(
Chaitanya MSV

@Chaitanya:ジョン・スキートの答えから例を実行できますか?
アーロンディグラ


20

実際にファイルの内容を読み取るには、Commons IO + Spring Coreを使用するのが好きです。Java 8を想定:

try (InputStream stream = new ClassPathResource("package/resource").getInputStream()) {
    IOUtils.toString(stream);
}

または:

InputStream stream = null;
try {
    stream = new ClassPathResource("/log4j.xml").getInputStream();
    IOUtils.toString(stream);
} finally {
    IOUtils.closeQuietly(stream);
}

入力ストリームを閉じるのはどうですか?
ステファン

ストリームは自動的に閉じられます。これは、「リソースを試してみてください」は、Java 7の機能であるdocs.oracle.com/javase/tutorial/essential/exceptions/...
のMichałマチェイGałuszka

これがtryステートメントの内部にある場合のみですが、ここではそうではありません。それは試みられているはずです(最終的なInputStreamストリーム= new ClassPathResource( "/ log4j.xml")。getInputStream()){...
andresp

15

クラスの絶対パスを取得するには、次を試してください。

String url = this.getClass().getResource("").getPath();

そして何?その情報はそれ自体では役に立ちません。
ローンの侯爵2015

この情報は完璧でした。getPath()しかありませんでした!
Patrick

@Patrickこの回答は「クラス絶対パス」を提供しません。URLを提供します。まったく同じことではありません。
ローンの侯爵

12

どういうわけか私にとって最良の答えはうまくいきません。代わりに少し異なるコードを使用する必要があります。

ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream is = loader.getResourceAsStream("SomeTextFile.txt");

これが同じ問題に遭遇した人たちの助けになることを願っています。


これは、クラスがアプリケーションローダーによって読み込まれたAndroidでも役立ちましたが、必要なキーはUIスレッドで遅延読み込みされていました。
asokan

ベストアンサーが機能しない理由に関する情報を提供する必要があります(アプリケーションの構造、使用しているフレームワーク、エラーなど)。最良の答えは、1)ディレクトリがクラスパス上にある必要がある、2)同じクラスローダーによってロードされたクラスから要求する必要があることを明確に述べています。これらの仮定の1つがアプリケーションに当てはまらない可能性があります。また、ハックとして導入されたため、コンテキストクラスローダーは推奨されません。一部のフレームワークはそれを使用しますが、その影響(プロジェクトの背景を説明する必要がある)を理解することが重要です
Xinchao

6

Guavaを使用する場合:

import com.google.common.io.Resources;

CLASSPATHからURLを取得できます。

URL resource = Resources.getResource("test.txt");
String file = resource.getFile();   // get file path 

またはInputStream:

InputStream is = Resources.getResource("test.txt").openStream();

リソースがJARファイルまたはWARファイル内にある場合、ファイルパスは役に立ちません。
ローンの侯爵

URLのgetFileメソッドはファイル名を返しません。有効なファイル名であることが保証されていないURLのパス部分を返すだけです。(URLクラスはJava 1.0の一部でした。当時、ほとんどのURLは実際には同じコンピューターまたは別のコンピューター上の物理ファイルを参照していました。)
VGR

3

ファイルの内容をからStringに読み込むにはclasspath、次のように使用できます。

private String resourceToString(String filePath) throws IOException, URISyntaxException
{
    try (InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(filePath))
    {
        return IOUtils.toString(inputStream);
    }
}

注:
IOUtilsはの一部ですCommons IO

次のように呼び出します。

String fileContents = resourceToString("ImOnTheClasspath.txt");

1

「CLASSPATHシステム変数に設定されているテキストファイルを読み込もうとしている」と言います。これはWindows上にあると思いますが、この醜いダイアログを使用して「システム変数」を編集しています。

次に、コンソールでJavaプログラムを実行します。そして、それは動作しません:コンソールは、システム変数の値のコピーを取得します一度それがされたときに開始します。これは、その後のダイアログの変更を意味しますても何の影響もないことを意味します。

これらのソリューションがあります:

  1. 変更するたびに新しいコンソールを起動する

  2. set CLASSPATH=...コンソールで使用して、コンソールに変数のコピーを設定し、コードが機能したら、最後の値を変数ダイアログに貼り付けます。

  3. Javaの呼び出しを.BATファイルに入れ、ダブルクリックします。これにより、毎回新しいコンソールが作成されます(したがって、システム変数の現在の値がコピーされます)。

注意:ユーザー変数もある場合はCLASSPATH、システム変数が隠されます。そのため、通常、グローバルシステムやユーザー変数に依存するのではなく、Javaプログラムの呼び出しを.BATファイルに入れ、そこにクラスパスを設定する方が(を使用してset CLASSPATH=)優れています。

また、これらは異なるクラスパスを持つようにバインドされているため、コンピューター上で複数のJavaプログラムを確実に動作させることができます。


0

私の答えは、質問で尋ねられたものとは正確には異なります。むしろ、プロジェクトのクラスパスからJavaアプリケーションにファイルを簡単に読み込むことができるソリューションを正確に示しています。

たとえば、example.xmlという設定ファイル名が次のようなパスにあるとします。

com.myproject.config.dev

そして私たちのJava実行可能クラスファイルは以下のパスにあります:-

com.myproject.server.main

ここで、devメインディレクトリ/フォルダー(com.myproject.server.main-アプリケーションのJava実行可能クラスが存在する場所)の両方にアクセスできる最も近い共通ディレクトリ/フォルダーである上記の両方のパスをチェックインします。これは、example.xmlファイルにアクセスできる最も近い共通ディレクトリ/フォルダーであるmyprojectフォルダー/ディレクトリです。したがって、java実行可能クラスがmain /フォルダーにあるので、myprojectにアクセスするには、.. / .. /のような2つのステップに戻る必要があります。これに続いて、ファイルを読み取る方法を確認します。

package com.myproject.server.main;

class Example {

  File xmlFile;

  public Example(){
       String filePath = this.getClass().getResource("../../config/dev/example.xml").getPath();
       this.xmlFile = new File(filePath);
    }

  public File getXMLFile() {
      return this.xmlFile;
  }
   public static void main(String args[]){
      Example ex = new Example();
      File xmlFile = ex.getXMLFile();
   }
}

0

プロジェクトをjarファイルにコンパイルする場合:ファイルをresources / files / your_file.textまたはpdfに配置できます。

そして、このコードを使用してください:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;

public class readFileService(){
    private static final Logger LOGGER = LoggerFactory.getLogger(readFileService.class);


    public byte[] getFile(){
        String filePath="/files/your_file";
        InputStream inputStreamFile;
        byte[] bytes;
        try{
            inputStreamFile = this.getClass().getResourceAsStream(filePath);
            bytes = new byte[inputStreamFile.available()];
            inputStreamFile.read(bytes);    
        } catch(NullPointerException | IOException e) {
            LOGGER.error("Erreur read file "+filePath+" error message :" +e.getMessage());
            return null;
        }
        return bytes;
    } 
}

-1

私はwebshpereアプリケーションサーバーを使用していますが、私のWebモジュールはSpring MVCで構築されています。これらTest.propertiesはresourcesフォルダにありました、私は以下を使用してこのファイルをロードしようとしました:

  1. this.getClass().getClassLoader().getResourceAsStream("Test.properties");
  2. this.getClass().getResourceAsStream("/Test.properties");

上記のコードはいずれもファイルをロードしませんでした。

しかし、以下のコードの助けを借りて、プロパティファイルは正常に読み込まれました。

Thread.currentThread().getContextClassLoader().getResourceAsStream("Test.properties");

ユーザー"user1695166"に感謝します。


1
Stack Overflowへようこそ!ソリューションの進捗状況を部分的に提供している場合でも、回答に「感謝」を追加しないでください。ソリューションが別の投稿と同じである場合、追加する必要はありません。サイトにある程度の時間を費やした後は、スタックオーバーフローがありがとうと言う方法である、好きな回答に賛成投票するための十分な権限を取得します。
SuperBiasedMan 2015

-1

使用する org.apache.commons.io.FileUtils.readFileToString(new File("src/test/resources/sample-data/fileName.txt"));


srcへの参照は使用しないでください...最終的なアーティファクトでは機能しません。
L.ホランダ

-1

シナリオ:

1)client-service-1.0-SNAPSHOT.jar依存関係があるread-classpath-resource-1.0-SNAPSHOT.jar

2)私たちは、クラスパスリソースのコンテンツ(読みたいsample.txtの)read-classpath-resource-1.0-SNAPSHOT.jarスルーをclient-service-1.0-SNAPSHOT.jar

3)read-classpath-resource-1.0-SNAPSHOT.jar持っているsrc/main/resources/sample.txt

ここに私が準備した実用的なサンプルコードがあります。開発時間を2〜3日浪費した後、完全なエンドツーエンドのソリューションを見つけました。これが時間の節約に役立つことを願っています

1. pom.xml/read-classpath-resource-1.0-SNAPSHOT.jar

<?xml version="1.0" encoding="UTF-8"?>
        <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
            <modelVersion>4.0.0</modelVersion>
            <groupId>jar-classpath-resource</groupId>
            <artifactId>read-classpath-resource</artifactId>
            <version>1.0-SNAPSHOT</version>
            <name>classpath-test</name>
            <properties>
                <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
                <org.springframework.version>4.3.3.RELEASE</org.springframework.version>
                <mvn.release.plugin>2.5.1</mvn.release.plugin>
                <output.path>${project.artifactId}</output.path>
                <io.dropwizard.version>1.0.3</io.dropwizard.version>
                <commons-io.verion>2.4</commons-io.verion>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-core</artifactId>
                    <version>${org.springframework.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-context</artifactId>
                    <version>${org.springframework.version}</version>
                </dependency>
                <dependency>
                    <groupId>commons-io</groupId>
                    <artifactId>commons-io</artifactId>
                    <version>${commons-io.verion}</version>
                </dependency>
            </dependencies>
            <build>
                <resources>
                    <resource>
                        <directory>src/main/resources</directory>
                    </resource>
                </resources>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-release-plugin</artifactId>
                        <version>${mvn.release.plugin}</version>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>3.1</version>
                        <configuration>
                            <source>1.8</source>
                            <target>1.8</target>
                            <encoding>UTF-8</encoding>
                        </configuration>
                    </plugin>
                    <plugin>
                        <artifactId>maven-jar-plugin</artifactId>
                        <version>2.5</version>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            <archive>
                                <manifest>
                                    <addClasspath>true</addClasspath>
                                    <useUniqueVersions>false</useUniqueVersions>
                                    <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                    <mainClass>demo.read.classpath.resources.ClassPathResourceReadTest</mainClass>
                                </manifest>
                                <manifestEntries>
                                    <Implementation-Artifact-Id>${project.artifactId}</Implementation-Artifact-Id>
                                    <Class-Path>sample.txt</Class-Path>
                                </manifestEntries>
                            </archive>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-shade-plugin</artifactId>
                        <version>2.2</version>
                        <configuration>
                            <createDependencyReducedPom>false</createDependencyReducedPom>
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                        </configuration>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>shade</goal>
                                </goals>
                                <configuration>
                                    <transformers>
                                        <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
                                        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                            <mainClass>demo.read.classpath.resources.ClassPathResourceReadTest</mainClass>
                                        </transformer>
                                    </transformers>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </project>

2. ClassPathResourceReadTest.javaクラスread-classpath-resource-1.0-SNAPSHOT.jarパスリソースファイルのコンテンツをロードするクラス。

package demo.read.classpath.resources;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public final class ClassPathResourceReadTest {
    public ClassPathResourceReadTest() throws IOException {
        InputStream inputStream = getClass().getResourceAsStream("/sample.txt");
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        List<Object> list = new ArrayList<>();
        String line;
        while ((line = reader.readLine()) != null) {
            list.add(line);
        }
        for (Object s1: list) {
            System.out.println("@@@ " +s1);
        }
        System.out.println("getClass().getResourceAsStream('/sample.txt') lines: "+list.size());
    }
}

3. pom.xml/client-service-1.0-SNAPSHOT.jar

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>client-service</groupId>
    <artifactId>client-service</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>jar-classpath-resource</groupId>
            <artifactId>read-classpath-resource</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.5</version>
                <configuration>
                    <outputDirectory>${project.build.directory}/lib</outputDirectory>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <useUniqueVersions>false</useUniqueVersions>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                            <mainClass>com.crazy.issue.client.AccessClassPathResource</mainClass>
                        </manifest>
                        <manifestEntries>
                            <Implementation-Artifact-Id>${project.artifactId}</Implementation-Artifact-Id>
                            <Implementation-Source-SHA>${buildNumber}</Implementation-Source-SHA>
                            <Class-Path>sample.txt</Class-Path>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <createDependencyReducedPom>false</createDependencyReducedPom>
                    <filters>
                        <filter>
                            <artifact>*:*</artifact>
                            <excludes>
                                <exclude>META-INF/*.SF</exclude>
                                <exclude>META-INF/*.DSA</exclude>
                                <exclude>META-INF/*.RSA</exclude>
                            </excludes>
                        </filter>
                    </filters>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.crazy.issue.client.AccessClassPathResource</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

4. クラスをAccessClassPathResource.javaインスタンス化ClassPathResourceReadTest.javaし、sample.txtそのコンテンツをロードして出力します。

package com.crazy.issue.client;

import demo.read.classpath.resources.ClassPathResourceReadTest;
import java.io.IOException;

public class AccessClassPathResource {
    public static void main(String[] args) throws IOException {
        ClassPathResourceReadTest test = new ClassPathResourceReadTest();
    }
}

5.次のように実行可能jarを実行します。

[ravibeli@localhost lib]$ java -jar client-service-1.0-SNAPSHOT.jar
****************************************
I am in resources directory of read-classpath-resource-1.0-SNAPSHOT.jar
****************************************
3) getClass().getResourceAsStream('/sample.txt'): 3

-2

getClassLoader()メソッドは使用せず、ファイル名の前に「/」を使用してください。"/" はとても重要です

this.getClass().getResourceAsStream("/SomeTextFile.txt");

リーディング/を使用すると、getClassLoader()メソッドを使用した場合とまったく同じ効果があります。
ローンの侯爵

-4
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class ReadFile

{
    /**
     * * feel free to make any modification I have have been here so I feel you
     * * * @param args * @throws InterruptedException
     */

    public static void main(String[] args) throws InterruptedException {
        // thread pool of 10
        File dir = new File(".");
        // read file from same directory as source //
        if (dir.isDirectory()) {
            File[] files = dir.listFiles();
            for (File file : files) {
                // if you wanna read file name with txt files
                if (file.getName().contains("txt")) {
                    System.out.println(file.getName());
                }

                // if you want to open text file and read each line then
                if (file.getName().contains("txt")) {
                    try {
                        // FileReader reads text files in the default encoding.
                        FileReader fileReader = new FileReader(
                                file.getAbsolutePath());
                        // Always wrap FileReader in BufferedReader.
                        BufferedReader bufferedReader = new BufferedReader(
                                fileReader);
                        String line;
                        // get file details and get info you need.
                        while ((line = bufferedReader.readLine()) != null) {
                            System.out.println(line);
                            // here you can say...
                            // System.out.println(line.substring(0, 10)); this
                            // prints from 0 to 10 indext
                        }
                    } catch (FileNotFoundException ex) {
                        System.out.println("Unable to open file '"
                                + file.getName() + "'");
                    } catch (IOException ex) {
                        System.out.println("Error reading file '"
                                + file.getName() + "'");
                        // Or we could just do this:
                        ex.printStackTrace();
                    }
                }
            }
        }

    }

}

質問にはまったく答えません。
ローンの侯爵

-5

「システム変数」をJavaクラスパスに配置する必要があります。


システム変数自体を入れました。
チャイタンヤMSV

「システム変数」 JavaのCLASSPATHです。答えは意味がありません。
ローン侯爵

完全に真実...この答えを書いたことさえ覚えていません:)
Salandur
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.