Expand my Community achievements bar.

Enhance your AEM Assets & Boost Your Development: [AEM Gems | June 19, 2024] Improving the Developer Experience with New APIs and Events
SOLVED

How to read a file from file system in AEM

Avatar

Level 3

Is there a way to read a file as Java.IO.File in AEM, because I need to pass a Java file object to a google api method and file is present on my computer file system. I tried various method like adapting a resource to File or getting file from BundleContext, but non of these worked for me.

Actually to get a GoogleCredential object I need to pass a service account email id, a json factory object and a .p12 file as Java.io.File object (which google provide for authentication).But I am not able to read the .p12 file from my file system or from project jar or or from content hierarchy.

Please suggest how can I read a file that is present on my file system in aem project.

Thanks in advance.

1 Accepted Solution

Avatar

Correct answer by
Administrator

Hi 

Please red the following article:-

Link:- http://www.wemblog.com/2011/10/how-to-read-external-file-in-cq.html (create a custom component/service to read file from FileSystem or read it from JCR after bring it to JCR)

How to read an external file in CQ

Use Case: You want to read something from external file

Solution : There are multiple ways you can do this I will mentioned two of them here,

1) You can put them under /resources folder under /src/main for example if you want to read a file called "test.txt" then you can put file under /src/resources/<any-sub-foler>/<file-to-read>

Then use following code to read file 
InputStream stream = getClass().getResourceAsStream("<file-to-read>");
in above case it would be InputStream stream = getClass().getResourceAsStream("/test.txt");

Good practice is to follow convention, For example if your source code is under /src/main/java/com/test/mytest/Test.java Then your resource should be in location /resource/com/test/myTest/<Your File>

Then you can use something like


InputStream in = Test.class.getResourceAsStream("<Your File>");


2) You can put file in repository (Any repository location is file) and use Node data as stream to read.

then use following code,
InputStream in = node.getNode("jcr:content").getProperty("jcr:data").getStream();

 

Another reference article :- https://helpx.adobe.com/experience-manager/using/uploading-files-aem1.html

//Uploading of images from FileSystem and keeping it in JCR.

 

I hope this would help you.

Thanks and Ragards

Kautuk Sahni



Kautuk Sahni

View solution in original post

2 Replies

Avatar

Correct answer by
Administrator

Hi 

Please red the following article:-

Link:- http://www.wemblog.com/2011/10/how-to-read-external-file-in-cq.html (create a custom component/service to read file from FileSystem or read it from JCR after bring it to JCR)

How to read an external file in CQ

Use Case: You want to read something from external file

Solution : There are multiple ways you can do this I will mentioned two of them here,

1) You can put them under /resources folder under /src/main for example if you want to read a file called "test.txt" then you can put file under /src/resources/<any-sub-foler>/<file-to-read>

Then use following code to read file 
InputStream stream = getClass().getResourceAsStream("<file-to-read>");
in above case it would be InputStream stream = getClass().getResourceAsStream("/test.txt");

Good practice is to follow convention, For example if your source code is under /src/main/java/com/test/mytest/Test.java Then your resource should be in location /resource/com/test/myTest/<Your File>

Then you can use something like


InputStream in = Test.class.getResourceAsStream("<Your File>");


2) You can put file in repository (Any repository location is file) and use Node data as stream to read.

then use following code,
InputStream in = node.getNode("jcr:content").getProperty("jcr:data").getStream();

 

Another reference article :- https://helpx.adobe.com/experience-manager/using/uploading-files-aem1.html

//Uploading of images from FileSystem and keeping it in JCR.

 

I hope this would help you.

Thanks and Ragards

Kautuk Sahni



Kautuk Sahni

Avatar

Level 2

Hi

Still, we are not able to load the file which is present in the resources folder.
Name of the file geodb.mmdb.
Code for loading the file:

We are trying to load the file for adding Maxmind geoip2 solution.

AEM version : 6.3

Java version : 1.8